mirror of
https://github.com/bitwarden/browser
synced 2025-12-06 00:13:28 +00:00
107 lines
3.7 KiB
JavaScript
107 lines
3.7 KiB
JavaScript
/* eslint-disable @typescript-eslint/no-require-imports, no-console */
|
|
const child = require("child_process");
|
|
const { exit } = require("process");
|
|
|
|
const fse = require("fs-extra");
|
|
|
|
const paths = {
|
|
macosBuild: "./macos/build",
|
|
extensionBuildDebug: "./macos/build/Debug/autofill-extension.appex",
|
|
extensionBuildReleaseAppStore: "./macos/build/ReleaseAppStore/autofill-extension.appex",
|
|
extensionBuildReleaseDeveloper: "./macos/build/ReleaseDeveloper/autofill-extension.appex",
|
|
extensionDistDir: "./macos/dist",
|
|
extensionDist: "./macos/dist/autofill-extension.appex",
|
|
macOsProject: "./macos/desktop.xcodeproj",
|
|
};
|
|
|
|
exports.default = buildMacOs;
|
|
|
|
async function buildMacOs() {
|
|
console.log("### Building Autofill Extension");
|
|
|
|
if (fse.existsSync(paths.macosBuild)) {
|
|
fse.removeSync(paths.macosBuild);
|
|
}
|
|
|
|
if (fse.existsSync(paths.extensionDistDir)) {
|
|
fse.removeSync(paths.extensionDistDir);
|
|
}
|
|
|
|
let configuration;
|
|
let codeSignIdentity;
|
|
let provisioningProfileSpecifier;
|
|
let buildDirectory;
|
|
const configurationArgument = process.argv[2];
|
|
if (configurationArgument !== undefined) {
|
|
// Use the configuration passed in to determine the configuration file.
|
|
if (configurationArgument == "mas-dev") {
|
|
configuration = "Debug";
|
|
codeSignIdentity = "Apple Development";
|
|
provisioningProfileSpecifier = "Bitwarden Desktop Autofill Development 2024";
|
|
buildDirectory = paths.extensionBuildDebug;
|
|
} else if (configurationArgument == "mas") {
|
|
configuration = "ReleaseAppStore";
|
|
codeSignIdentity = "3rd Party Mac Developer Application";
|
|
provisioningProfileSpecifier = "Bitwarden Desktop Autofill App Store 2024";
|
|
buildDirectory = paths.extensionBuildReleaseAppStore;
|
|
} else if (configurationArgument == "mac") {
|
|
configuration = "ReleaseDeveloper";
|
|
codeSignIdentity = "Developer ID Application";
|
|
provisioningProfileSpecifier = "Bitwarden Desktop Autofill Extension Developer Dis";
|
|
buildDirectory = paths.extensionBuildReleaseDeveloper;
|
|
} else {
|
|
console.log("### Unable to determine configuration, skipping Autofill Extension build");
|
|
return;
|
|
}
|
|
} else {
|
|
console.log("### No configuration argument found, skipping Autofill Extension build");
|
|
return;
|
|
}
|
|
|
|
const proc = child.spawn("xcodebuild", [
|
|
"-project",
|
|
paths.macOsProject,
|
|
"-alltargets",
|
|
"-configuration",
|
|
configuration,
|
|
"-sdk",
|
|
"macosx15.0", // Specify the SDK version explicitly
|
|
"CODE_SIGN_INJECT_BASE_ENTITLEMENTS=NO",
|
|
"OTHER_CODE_SIGN_FLAGS='--timestamp'",
|
|
|
|
// While these arguments are defined in the `configuration` file above, xcodebuild has a bug in it currently that requires these arguments
|
|
// be explicitly defined in this call.
|
|
`CODE_SIGN_IDENTITY=${codeSignIdentity}`,
|
|
`PROVISIONING_PROFILE_SPECIFIER=${provisioningProfileSpecifier}`,
|
|
]);
|
|
stdOutProc(proc);
|
|
await new Promise((resolve, reject) =>
|
|
proc.on("close", (code) => {
|
|
if (code > 0) {
|
|
console.error("xcodebuild failed with code", code);
|
|
return reject(new Error(`xcodebuild failed with code ${code}`));
|
|
}
|
|
console.log("xcodebuild success");
|
|
resolve();
|
|
}),
|
|
);
|
|
|
|
fse.mkdirSync(paths.extensionDistDir);
|
|
fse.copySync(buildDirectory, paths.extensionDist);
|
|
|
|
// Delete the build dir, otherwise MacOS will load the extension from there instead of the Bitwarden.app bundle
|
|
fse.removeSync(paths.macosBuild);
|
|
}
|
|
|
|
function stdOutProc(proc) {
|
|
proc.stdout.on("data", (data) => console.log(data.toString()));
|
|
proc.stderr.on("data", (data) => console.error(data.toString()));
|
|
}
|
|
|
|
buildMacOs()
|
|
.then(() => console.log("macOS build complete"))
|
|
.catch((err) => {
|
|
console.error("macOS build failed", err);
|
|
exit(-1);
|
|
});
|