mirror of
https://github.com/musistudio/claude-code-router.git
synced 2026-07-09 17:18:24 +00:00
72 lines
2.3 KiB
JavaScript
72 lines
2.3 KiB
JavaScript
import { execFileSync } from "node:child_process";
|
|
|
|
const errors = [];
|
|
|
|
function reportAndExit() {
|
|
if (errors.length === 0) {
|
|
return;
|
|
}
|
|
|
|
console.error("macOS release preflight failed:");
|
|
for (const error of errors) {
|
|
console.error(`- ${error}`);
|
|
}
|
|
process.exit(1);
|
|
}
|
|
|
|
function run(command, args) {
|
|
try {
|
|
return execFileSync(command, args, { encoding: "utf8", stdio: ["ignore", "pipe", "pipe"] });
|
|
} catch (error) {
|
|
const stderr = error.stderr?.toString().trim();
|
|
const stdout = error.stdout?.toString().trim();
|
|
const details = stderr || stdout || error.message;
|
|
errors.push(`cannot run ${command} ${args.join(" ")}: ${details}`);
|
|
return "";
|
|
}
|
|
}
|
|
|
|
function hasCompleteNotaryCredentials() {
|
|
const hasAppPassword =
|
|
Boolean(process.env.APPLE_ID) &&
|
|
Boolean(process.env.APPLE_APP_SPECIFIC_PASSWORD) &&
|
|
Boolean(process.env.APPLE_TEAM_ID);
|
|
|
|
const hasApiKey =
|
|
Boolean(process.env.APPLE_API_KEY) &&
|
|
Boolean(process.env.APPLE_API_KEY_ID) &&
|
|
Boolean(process.env.APPLE_API_ISSUER);
|
|
|
|
const hasKeychainProfile = Boolean(process.env.APPLE_KEYCHAIN_PROFILE);
|
|
|
|
return hasAppPassword || hasApiKey || hasKeychainProfile;
|
|
}
|
|
|
|
if (process.platform !== "darwin") {
|
|
errors.push("macOS release builds must run on macOS.");
|
|
reportAndExit();
|
|
}
|
|
|
|
const developerDir = run("xcode-select", ["-p"]).trim();
|
|
if (developerDir.endsWith("/CommandLineTools")) {
|
|
errors.push("notarization stapling requires full Xcode. Install Xcode and run `sudo xcode-select -s /Applications/Xcode.app/Contents/Developer`.");
|
|
}
|
|
|
|
run("xcrun", ["notarytool", "--version"]);
|
|
run("xcrun", ["-f", "stapler"]);
|
|
|
|
if (!process.env.CSC_LINK) {
|
|
const identities = run("security", ["find-identity", "-v", "-p", "codesigning"]);
|
|
if (!/"Developer ID Application: .+ \([A-Z0-9]+\)"/.test(identities)) {
|
|
errors.push("no Developer ID Application signing identity was found in the keychain. Install a Developer ID Application certificate or provide CSC_LINK/CSC_KEY_PASSWORD.");
|
|
}
|
|
}
|
|
|
|
if (!hasCompleteNotaryCredentials()) {
|
|
errors.push(
|
|
"missing notarization credentials. Set APPLE_API_KEY + APPLE_API_KEY_ID + APPLE_API_ISSUER, or APPLE_ID + APPLE_APP_SPECIFIC_PASSWORD + APPLE_TEAM_ID, or APPLE_KEYCHAIN_PROFILE."
|
|
);
|
|
}
|
|
|
|
reportAndExit();
|
|
console.log("macOS release preflight passed.");
|