From 0f1077076e922ef24b1109d545a541bfbefad75d Mon Sep 17 00:00:00 2001 From: ruomeng Date: Thu, 30 Apr 2026 13:48:23 -0400 Subject: [PATCH] Skip binary CLI relaunch (#26261) --- .../workflows/build-unsigned-mac-binaries.yml | 56 +++++++++++++++++++ packages/cli/index.ts | 6 +- packages/cli/src/gemini.tsx | 6 +- scripts/build_binary.js | 5 ++ 4 files changed, 71 insertions(+), 2 deletions(-) create mode 100644 .github/workflows/build-unsigned-mac-binaries.yml diff --git a/.github/workflows/build-unsigned-mac-binaries.yml b/.github/workflows/build-unsigned-mac-binaries.yml new file mode 100644 index 0000000000..b91d47fa94 --- /dev/null +++ b/.github/workflows/build-unsigned-mac-binaries.yml @@ -0,0 +1,56 @@ +name: 'Build Unsigned Mac Binaries' + +on: + workflow_dispatch: + +permissions: + contents: 'read' + +defaults: + run: + shell: 'bash' + +jobs: + build-mac: + name: 'Build Unsigned (${{ matrix.arch }})' + runs-on: 'macos-latest' + strategy: + fail-fast: false + matrix: + arch: ['x64', 'arm64'] + + steps: + - name: 'Checkout' + uses: 'actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5' # ratchet:actions/checkout@v4 + + - name: 'Set up Node.js' + uses: 'actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020' # ratchet:actions/setup-node@v4 + with: + node-version-file: '.nvmrc' + architecture: '${{ matrix.arch }}' + cache: 'npm' + + - name: 'Install dependencies' + run: 'npm ci' + + - name: 'Build Binary' + env: + SKIP_SIGNING: 'true' + run: 'npm run build:binary' + + - name: 'Verify Output Exists' + run: | + if [ -f "dist/darwin-${{ matrix.arch }}/gemini" ]; then + echo "Binary found at dist/darwin-${{ matrix.arch }}/gemini" + else + echo "Error: Binary not found in dist/darwin-${{ matrix.arch }}/" + ls -R dist/ + exit 1 + fi + + - name: 'Upload Artifact' + uses: 'actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02' # ratchet:actions/upload-artifact@v4 + with: + name: 'gemini-darwin-${{ matrix.arch }}-unsigned' + path: 'dist/darwin-${{ matrix.arch }}/' + retention-days: 5 diff --git a/packages/cli/index.ts b/packages/cli/index.ts index f13d4707b0..ade92995e1 100644 --- a/packages/cli/index.ts +++ b/packages/cli/index.ts @@ -75,7 +75,11 @@ async function getMemoryNodeArgs(): Promise { } async function run() { - if (!process.env['GEMINI_CLI_NO_RELAUNCH'] && !process.env['SANDBOX']) { + if ( + !process.env['GEMINI_CLI_NO_RELAUNCH'] && + !process.env['SANDBOX'] && + process.env['IS_BINARY'] !== 'true' + ) { // --- Lightweight Parent Process / Daemon --- // We avoid importing heavy dependencies here to save ~1.5s of startup time. diff --git a/packages/cli/src/gemini.tsx b/packages/cli/src/gemini.tsx index 2e44b8865f..1319ec8194 100644 --- a/packages/cli/src/gemini.tsx +++ b/packages/cli/src/gemini.tsx @@ -125,7 +125,11 @@ export function getNodeMemoryArgs(isDebugMode: boolean): string[] { ); } - if (process.env['GEMINI_CLI_NO_RELAUNCH']) { + if ( + process.env['IS_BINARY'] === 'true' || + process.env['GEMINI_CLI_NO_RELAUNCH'] || + process.env['SANDBOX'] + ) { return []; } diff --git a/scripts/build_binary.js b/scripts/build_binary.js index 8bc03a86e1..5d32cb92d0 100644 --- a/scripts/build_binary.js +++ b/scripts/build_binary.js @@ -99,6 +99,11 @@ function removeSignature(filePath) { * @param {string} filePath */ function signFile(filePath) { + if (process.env.SKIP_SIGNING === 'true') { + console.log(`Skipping signing for ${filePath} (SKIP_SIGNING=true)`); + return; + } + const platform = process.platform; if (platform === 'darwin') {