diff --git a/.github/workflows/e2e.yml b/.github/workflows/e2e.yml index a389e06458..6ac39c4222 100644 --- a/.github/workflows/e2e.yml +++ b/.github/workflows/e2e.yml @@ -31,6 +31,7 @@ jobs: os: - 'ubuntu-latest' - 'macos-latest' + - 'gemini-cli-windows-16-core' sandbox: - 'sandbox:none' - 'sandbox:docker' @@ -40,6 +41,8 @@ jobs: # Docker tests are not supported on macOS or Windows - os: 'macos-latest' sandbox: 'sandbox:docker' + - os: 'gemini-cli-windows-16-core' + sandbox: 'sandbox:docker' steps: - name: 'Checkout (fork)' @@ -57,7 +60,6 @@ jobs: uses: 'actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020' # ratchet:actions-node@v4 with: node-version: '${{ matrix.node-version }}' - cache: 'npm' - name: 'Install dependencies' run: |- @@ -78,5 +80,6 @@ jobs: KEEP_OUTPUT: 'true' SANDBOX: '${{ matrix.sandbox }}' VERBOSE: 'true' + shell: 'bash' run: |- npm run "test:integration:${SANDBOX}" diff --git a/integration-tests/shell-service.test.ts b/integration-tests/shell-service.test.ts index afa9c65d64..b4c1ada0c5 100644 --- a/integration-tests/shell-service.test.ts +++ b/integration-tests/shell-service.test.ts @@ -96,8 +96,8 @@ describe('ShellExecutionService programmatic integration tests', () => { ); it('should abort a running process', async () => { - // A command that runs for a bit. 'sleep' on unix, 'timeout' on windows. - const command = process.platform === 'win32' ? 'timeout /t 20' : 'sleep 20'; + // A command that runs for a bit. + const command = 'node -e "setTimeout(() => {}, 20000)"'; const onOutputEvent = vi.fn(); const abortController = new AbortController(); diff --git a/integration-tests/test-helper.ts b/integration-tests/test-helper.ts index ceb7c1633e..a02b7a28c3 100644 --- a/integration-tests/test-helper.ts +++ b/integration-tests/test-helper.ts @@ -5,7 +5,6 @@ */ import { execSync, spawn } from 'node:child_process'; -import { parse } from 'shell-quote'; import { mkdirSync, writeFileSync, readFileSync } from 'node:fs'; import { join, dirname } from 'node:path'; import { fileURLToPath } from 'node:url'; @@ -182,7 +181,7 @@ export class TestRig { | { prompt?: string; stdin?: string; stdinDoesNotEnd?: boolean }, ...args: string[] ): Promise { - let command = `node ${this.bundlePath} --yolo`; + const commandArgs = [this.bundlePath, '--yolo']; const execOptions: { cwd: string; encoding: 'utf-8'; @@ -193,25 +192,22 @@ export class TestRig { }; if (typeof promptOrOptions === 'string') { - command += ` --prompt ${JSON.stringify(promptOrOptions)}`; + commandArgs.push('--prompt', promptOrOptions); } else if ( typeof promptOrOptions === 'object' && promptOrOptions !== null ) { if (promptOrOptions.prompt) { - command += ` --prompt ${JSON.stringify(promptOrOptions.prompt)}`; + commandArgs.push('--prompt', promptOrOptions.prompt); } if (promptOrOptions.stdin) { execOptions.input = promptOrOptions.stdin; } } - command += ` ${args.join(' ')}`; + commandArgs.push(...args); - const commandArgs = parse(command); - const node = commandArgs.shift() as string; - - const child = spawn(node, commandArgs as string[], { + const child = spawn('node', commandArgs, { cwd: this.testDir!, stdio: 'pipe', }); diff --git a/package.json b/package.json index 7f61c4d450..c73d8e5a71 100644 --- a/package.json +++ b/package.json @@ -36,9 +36,9 @@ "test:scripts": "vitest run --config ./scripts/tests/vitest.config.ts", "test:e2e": "cross-env VERBOSE=true KEEP_OUTPUT=true npm run test:integration:sandbox:none", "test:integration:all": "npm run test:integration:sandbox:none && npm run test:integration:sandbox:docker && npm run test:integration:sandbox:podman", - "test:integration:sandbox:none": "GEMINI_SANDBOX=false vitest run --root ./integration-tests", - "test:integration:sandbox:docker": "GEMINI_SANDBOX=docker npm run build:sandbox && GEMINI_SANDBOX=docker vitest run --root ./integration-tests", - "test:integration:sandbox:podman": "GEMINI_SANDBOX=podman vitest run --root ./integration-tests", + "test:integration:sandbox:none": "cross-env GEMINI_SANDBOX=false vitest run --root ./integration-tests", + "test:integration:sandbox:docker": "cross-env GEMINI_SANDBOX=docker npm run build:sandbox && cross-env GEMINI_SANDBOX=docker vitest run --root ./integration-tests", + "test:integration:sandbox:podman": "cross-env GEMINI_SANDBOX=podman vitest run --root ./integration-tests", "lint": "eslint . --ext .ts,.tsx && eslint integration-tests", "lint:fix": "eslint . --fix && eslint integration-tests --fix", "lint:ci": "eslint . --ext .ts,.tsx --max-warnings 0 && eslint integration-tests --max-warnings 0",