mirror of
https://github.com/google-gemini/gemini-cli.git
synced 2026-05-14 13:53:02 -07:00
b4f49bf37a
This PR resolves the critical "2,160 items/day" throughput reporting anomaly and reduces CI costs by optimizing macOS runners. ### Changes: - **Search-Based Sampling**: Updated `throughput.ts`, `latency.ts`, and `user_touches.ts` to use the GitHub Search API for items merged/closed in the last 7 days. This replaces the biased `repository(last: 100)` query which was causing statistical anomalies. - **Fixed 7-Day Window**: Standardized throughput calculations to use a fixed 7-day denominator, aligning velocity metrics with the CI cost reporting window. - **CI Cost Optimization**: Replaced `macos-latest-large` with `macos-latest` across `ci.yml`, `chained_e2e.yml`, and `deflake.yml`. - **Matrix Reduction**: Reduced the `test_mac` matrix in `ci.yml` to Node 20.x only, significantly cutting down on redundant Mac CI minutes. ### Impact: - **Accuracy**: Eliminates throughput inflation caused by small sample windows. - **Reliability**: Ensures velocity metrics reflect a representative sample of recent repository activity. - **Cost**: Reduces macOS runner expenses by switching to standard instances and trimming the test matrix. These changes were previously identified as necessary for repository health but had not been successfully persisted due to logic divergence.
176 lines
6.0 KiB
YAML
176 lines
6.0 KiB
YAML
name: 'Deflake E2E'
|
|
|
|
on:
|
|
workflow_dispatch:
|
|
inputs:
|
|
branch_ref:
|
|
description: 'Branch to run on'
|
|
required: true
|
|
default: 'main'
|
|
type: 'string'
|
|
test_name_pattern:
|
|
description: 'The test name pattern to use'
|
|
required: false
|
|
type: 'string'
|
|
runs:
|
|
description: 'The number of runs'
|
|
required: false
|
|
default: 5
|
|
type: 'number'
|
|
|
|
concurrency:
|
|
group: '${{ github.workflow }}-${{ github.head_ref || github.ref }}'
|
|
cancel-in-progress: |-
|
|
${{ github.ref != 'refs/heads/main' && !startsWith(github.ref, 'refs/heads/release/') }}
|
|
|
|
jobs:
|
|
deflake_e2e_linux:
|
|
name: 'E2E Test (Linux) - ${{ matrix.sandbox }}'
|
|
runs-on: 'gemini-cli-ubuntu-16-core'
|
|
if: "github.repository == 'google-gemini/gemini-cli'"
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
sandbox:
|
|
- 'sandbox:none'
|
|
- 'sandbox:docker'
|
|
node-version:
|
|
- '20.x'
|
|
|
|
steps:
|
|
- name: 'Checkout'
|
|
uses: 'actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955' # ratchet:actions/checkout@v5
|
|
with:
|
|
ref: '${{ github.event.pull_request.head.sha }}'
|
|
repository: '${{ github.repository }}'
|
|
|
|
- name: 'Set up Node.js ${{ matrix.node-version }}'
|
|
uses: 'actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020' # ratchet:actions-node@v4
|
|
with:
|
|
node-version: '${{ matrix.node-version }}'
|
|
|
|
- name: 'Install dependencies'
|
|
run: 'npm ci'
|
|
|
|
- name: 'Build project'
|
|
run: 'npm run build'
|
|
|
|
- name: 'Set up Docker'
|
|
if: "matrix.sandbox == 'sandbox:docker'"
|
|
uses: 'docker/setup-buildx-action@e468171a9de216ec08956ac3ada2f0791b6bd435' # ratchet:docker/setup-buildx-action@v3
|
|
|
|
- name: 'Run E2E tests'
|
|
env:
|
|
GEMINI_API_KEY: '${{ secrets.GEMINI_API_KEY }}'
|
|
GEMINI_CLI_TRUST_WORKSPACE: true
|
|
IS_DOCKER: "${{ matrix.sandbox == 'sandbox:docker' }}"
|
|
KEEP_OUTPUT: 'true'
|
|
RUNS: '${{ github.event.inputs.runs }}'
|
|
TEST_NAME_PATTERN: '${{ github.event.inputs.test_name_pattern }}'
|
|
VERBOSE: 'true'
|
|
shell: 'bash'
|
|
run: |
|
|
if [[ "${IS_DOCKER}" == "true" ]]; then
|
|
npm run deflake:test:integration:sandbox:docker -- --runs="${RUNS}" -- --testNamePattern "'${TEST_NAME_PATTERN}'"
|
|
else
|
|
npm run deflake:test:integration:sandbox:none -- --runs="${RUNS}" -- --testNamePattern "'${TEST_NAME_PATTERN}'"
|
|
fi
|
|
|
|
deflake_e2e_mac:
|
|
name: 'E2E Test (macOS)'
|
|
runs-on: 'macos-latest'
|
|
if: "github.repository == 'google-gemini/gemini-cli'"
|
|
steps:
|
|
- name: 'Checkout'
|
|
uses: 'actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955' # ratchet:actions/checkout@v5
|
|
with:
|
|
ref: '${{ github.event.pull_request.head.sha }}'
|
|
repository: '${{ github.repository }}'
|
|
|
|
- name: 'Set up Node.js 20.x'
|
|
uses: 'actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020' # ratchet:actions-node@v4
|
|
with:
|
|
node-version: '20.x'
|
|
|
|
- name: 'Install dependencies'
|
|
run: 'npm ci'
|
|
|
|
- name: 'Build project'
|
|
run: 'npm run build'
|
|
|
|
- name: 'Fix rollup optional dependencies on macOS'
|
|
if: "runner.os == 'macOS'"
|
|
run: |
|
|
npm cache clean --force
|
|
- name: 'Run E2E tests (non-Windows)'
|
|
if: "runner.os != 'Windows'"
|
|
env:
|
|
GEMINI_API_KEY: '${{ secrets.GEMINI_API_KEY }}'
|
|
GEMINI_CLI_TRUST_WORKSPACE: true
|
|
KEEP_OUTPUT: 'true'
|
|
RUNS: '${{ github.event.inputs.runs }}'
|
|
SANDBOX: 'sandbox:none'
|
|
TEST_NAME_PATTERN: '${{ github.event.inputs.test_name_pattern }}'
|
|
VERBOSE: 'true'
|
|
run: |
|
|
npm run deflake:test:integration:sandbox:none -- --runs="${RUNS}" -- --testNamePattern "'${TEST_NAME_PATTERN}'"
|
|
|
|
deflake_e2e_windows:
|
|
name: 'Slow E2E - Win'
|
|
runs-on: 'gemini-cli-windows-16-core'
|
|
if: "github.repository == 'google-gemini/gemini-cli'"
|
|
steps:
|
|
- name: 'Checkout'
|
|
uses: 'actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955' # ratchet:actions/checkout@v5
|
|
with:
|
|
ref: '${{ github.event.pull_request.head.sha }}'
|
|
repository: '${{ github.repository }}'
|
|
|
|
- name: 'Set up Node.js 20.x'
|
|
uses: 'actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020' # ratchet:actions-node@v4
|
|
with:
|
|
node-version: '20.x'
|
|
cache: 'npm'
|
|
|
|
- name: 'Configure Windows Defender exclusions'
|
|
run: |
|
|
Add-MpPreference -ExclusionPath $env:GITHUB_WORKSPACE -Force
|
|
Add-MpPreference -ExclusionPath "$env:GITHUB_WORKSPACE\node_modules" -Force
|
|
Add-MpPreference -ExclusionPath "$env:GITHUB_WORKSPACE\packages" -Force
|
|
Add-MpPreference -ExclusionPath "$env:TEMP" -Force
|
|
shell: 'pwsh'
|
|
|
|
- name: 'Configure npm for Windows performance'
|
|
run: |
|
|
npm config set progress false
|
|
npm config set audit false
|
|
npm config set fund false
|
|
npm config set loglevel error
|
|
npm config set maxsockets 32
|
|
npm config set registry https://registry.npmjs.org/
|
|
shell: 'pwsh'
|
|
|
|
- name: 'Install dependencies'
|
|
run: 'npm ci'
|
|
shell: 'pwsh'
|
|
|
|
- name: 'Build project'
|
|
run: 'npm run build'
|
|
shell: 'pwsh'
|
|
|
|
- name: 'Run E2E tests'
|
|
env:
|
|
GEMINI_API_KEY: '${{ secrets.GEMINI_API_KEY }}'
|
|
GEMINI_CLI_TRUST_WORKSPACE: true
|
|
KEEP_OUTPUT: 'true'
|
|
SANDBOX: 'sandbox:none'
|
|
VERBOSE: 'true'
|
|
NODE_OPTIONS: '--max-old-space-size=32768 --max-semi-space-size=256'
|
|
UV_THREADPOOL_SIZE: '32'
|
|
NODE_ENV: 'test'
|
|
RUNS: '${{ github.event.inputs.runs }}'
|
|
TEST_NAME_PATTERN: '${{ github.event.inputs.test_name_pattern }}'
|
|
shell: 'pwsh'
|
|
run: |
|
|
npm run deflake:test:integration:sandbox:none -- --runs="$env:RUNS" -- --testNamePattern "'$env:TEST_NAME_PATTERN'"
|