From f9c3e0d71a689686d2e422d8d9bcd95c36b03182 Mon Sep 17 00:00:00 2001 From: Daniel Young Lee Date: Sun, 10 Aug 2025 13:22:38 -0700 Subject: [PATCH] test: add support for testing native binaries - Update TestRig to support GEMINI_BINARY environment variable - Add E2E smoke test job for native Linux binary - Minimal addition that runs in parallel with existing tests --- .github/workflows/e2e.yml | 21 +++++++++++++++++++++ integration-tests/test-helper.js | 17 +++++++++++++---- 2 files changed, 34 insertions(+), 4 deletions(-) diff --git a/.github/workflows/e2e.yml b/.github/workflows/e2e.yml index f9f8242232..fbb4ff9d68 100644 --- a/.github/workflows/e2e.yml +++ b/.github/workflows/e2e.yml @@ -71,3 +71,24 @@ jobs: env: GEMINI_API_KEY: ${{ secrets.GEMINI_API_KEY }} run: npm run test:e2e + + e2e-test-native-binary: + name: E2E Native Binary Smoke Test + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4 + - uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4 + with: + node-version: 20.x + cache: 'npm' + - uses: oven-sh/setup-bun@4bc047ad259df6fc24a6c9b0f9a0cb08cf17fbe5 # v2 + with: + bun-version: '1.2.20' + - run: npm ci + - run: npm run bundle + - run: npm run build:binaries + - name: Smoke test native binary + env: + GEMINI_API_KEY: ${{ secrets.GEMINI_API_KEY }} + GEMINI_BINARY: ${{ github.workspace }}/bundle/binaries/gemini-cli-linux-x64 + run: npm run test:integration:sandbox:none -- list_directory diff --git a/integration-tests/test-helper.js b/integration-tests/test-helper.js index d1125a78d2..0979ceaeb3 100644 --- a/integration-tests/test-helper.js +++ b/integration-tests/test-helper.js @@ -103,7 +103,14 @@ export function validateModelOutput( export class TestRig { constructor() { - this.bundlePath = join(__dirname, '..', 'bundle/gemini.js'); + // Support testing native binaries via GEMINI_BINARY env variable + if (env.GEMINI_BINARY) { + this.binaryPath = env.GEMINI_BINARY; + this.isNativeBinary = true; + } else { + this.bundlePath = join(__dirname, '..', 'bundle/gemini.js'); + this.isNativeBinary = false; + } this.testDir = null; } @@ -162,7 +169,9 @@ export class TestRig { } run(promptOrOptions, ...args) { - let command = `node ${this.bundlePath} --yolo`; + let command = this.isNativeBinary + ? `${this.binaryPath} --yolo` + : `node ${this.bundlePath} --yolo`; const execOptions = { cwd: this.testDir, encoding: 'utf-8', @@ -185,9 +194,9 @@ export class TestRig { command += ` ${args.join(' ')}`; const commandArgs = parse(command); - const node = commandArgs.shift(); + const executable = commandArgs.shift(); - const child = spawn(node, commandArgs, { + const child = spawn(executable, commandArgs, { cwd: this.testDir, stdio: 'pipe', });