mirror of
https://github.com/google-gemini/gemini-cli.git
synced 2026-06-13 21:07:00 -07:00
a28ff41a75
This commit adds a step to the E2E workflow to create an .npmrc file and configure it with the necessary credentials for the GitHub Packages registry. This resolves the '401 Unauthorized' error that was occurring during the 'npm ci' step.
262 lines
9.1 KiB
YAML
262 lines
9.1 KiB
YAML
name: 'Testing: E2E'
|
|
|
|
on:
|
|
push:
|
|
branches:
|
|
- 'main'
|
|
# This will run for PRs from the base repository, providing secrets.
|
|
pull_request:
|
|
branches:
|
|
- 'main'
|
|
- 'release/**'
|
|
# This will run for PRs from forks when a label is added.
|
|
pull_request_target:
|
|
types: ['labeled']
|
|
merge_group:
|
|
workflow_dispatch:
|
|
inputs:
|
|
branch_ref:
|
|
description: 'Branch to run on'
|
|
required: true
|
|
default: 'main'
|
|
type: 'string'
|
|
|
|
concurrency:
|
|
group: '${{ github.workflow }}-${{ github.head_ref || github.ref }}'
|
|
cancel-in-progress: |-
|
|
${{ github.ref != 'refs/heads/main' && !startsWith(github.ref, 'refs/heads/release/') }}
|
|
|
|
jobs:
|
|
merge_queue_skipper:
|
|
name: 'Merge Queue Skipper'
|
|
runs-on: 'gemini-cli-ubuntu-16-core'
|
|
outputs:
|
|
skip: '${{ steps.merge-queue-e2e-skipper.outputs.skip-check }}'
|
|
steps:
|
|
- id: 'merge-queue-e2e-skipper'
|
|
uses: 'cariad-tech/merge-queue-ci-skipper@1032489e59437862c90a08a2c92809c903883772' # ratchet:cariad-tech/merge-queue-ci-skipper@main
|
|
with:
|
|
secret: '${{ secrets.GITHUB_TOKEN }}'
|
|
|
|
e2e_linux:
|
|
name: 'E2E Test (Linux) - ${{ matrix.sandbox }}'
|
|
needs: 'merge_queue_skipper'
|
|
if: |
|
|
needs.merge_queue_skipper.outputs.skip == 'false' &&
|
|
(github.event_name == 'push' ||
|
|
github.event_name == 'merge_group' ||
|
|
github.event_name == 'workflow_dispatch' ||
|
|
(github.event.pull_request.head.repo.full_name == github.repository) ||
|
|
(github.event.label.name == 'maintainer:e2e:ok'))
|
|
runs-on: 'gemini-cli-ubuntu-16-core'
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
sandbox:
|
|
- 'sandbox:none'
|
|
- 'sandbox:docker'
|
|
node-version:
|
|
- '20.x'
|
|
|
|
steps:
|
|
- name: 'Checkout (fork)'
|
|
uses: 'actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955' # ratchet:actions/checkout@v5
|
|
if: "github.event_name == 'pull_request_target'"
|
|
with:
|
|
ref: '${{ github.event.pull_request.head.sha }}'
|
|
repository: '${{ github.event.pull_request.head.repo.full_name }}'
|
|
|
|
- name: 'Checkout (internal)'
|
|
uses: 'actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955' # ratchet:actions/checkout@v5
|
|
if: "github.event_name != 'pull_request_target'"
|
|
with:
|
|
ref: '${{ github.event.inputs.branch_ref || github.ref }}'
|
|
|
|
- name: 'Set up Node.js ${{ matrix.node-version }}'
|
|
uses: 'actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020' # ratchet:actions-node@v4
|
|
with:
|
|
node-version: '${{ matrix.node-version }}'
|
|
|
|
- name: 'Configure npm for GitHub Packages'
|
|
run: |
|
|
echo "@google-gemini:registry=https://npm.pkg.github.com/" > .npmrc
|
|
echo "//npm.pkg.github.com/:_authToken=${{ secrets.GITHUB_TOKEN }}" >> .npmrc
|
|
|
|
- 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 }}'
|
|
KEEP_OUTPUT: 'true'
|
|
VERBOSE: 'true'
|
|
shell: 'bash'
|
|
run: |
|
|
if [[ "${{ matrix.sandbox }}" == "sandbox:docker" ]]; then
|
|
npm run test:integration:sandbox:docker
|
|
else
|
|
npm run test:integration:sandbox:none
|
|
fi
|
|
|
|
e2e_mac:
|
|
name: 'E2E Test (macOS)'
|
|
needs: 'merge_queue_skipper'
|
|
if: |
|
|
needs.merge_queue_skipper.outputs.skip == 'false' &&
|
|
(github.event_name == 'push' ||
|
|
github.event_name == 'merge_group' ||
|
|
github.event_name == 'workflow_dispatch' ||
|
|
(github.event.pull_request.head.repo.full_name == github.repository) ||
|
|
(github.event.label.name == 'maintainer:e2e:ok'))
|
|
runs-on: 'macos-latest'
|
|
steps:
|
|
- name: 'Checkout (fork)'
|
|
uses: 'actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955' # ratchet:actions/checkout@v5
|
|
if: "github.event_name == 'pull_request_target'"
|
|
with:
|
|
ref: '${{ github.event.pull_request.head.sha }}'
|
|
repository: '${{ github.event.pull_request.head.repo.full_name }}'
|
|
|
|
- name: 'Checkout (internal)'
|
|
uses: 'actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955' # ratchet:actions/checkout@v5
|
|
if: "github.event_name != 'pull_request_target'"
|
|
with:
|
|
ref: '${{ github.event.inputs.branch_ref || github.ref }}'
|
|
|
|
- name: 'Set up Node.js 20.x'
|
|
uses: 'actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020' # ratchet:actions-node@v4
|
|
with:
|
|
node-version: '20.x'
|
|
|
|
- name: 'Configure npm for GitHub Packages'
|
|
run: |
|
|
echo "@google-gemini:registry=https://npm.pkg.github.com/" > .npmrc
|
|
echo "//npm.pkg.github.com/:_authToken=${{ secrets.GITHUB_TOKEN }}" >> .npmrc
|
|
|
|
- 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 }}'
|
|
KEEP_OUTPUT: 'true'
|
|
SANDBOX: 'sandbox:none'
|
|
VERBOSE: 'true'
|
|
run: 'npm run test:integration:sandbox:none'
|
|
|
|
e2e_windows:
|
|
name: 'Slow E2E - Win'
|
|
needs: 'merge_queue_skipper'
|
|
if: |
|
|
needs.merge_queue_skipper.outputs.skip == 'false' &&
|
|
(github.event_name == 'push' ||
|
|
github.event_name == 'merge_group' ||
|
|
github.event_name == 'workflow_dispatch' ||
|
|
(github.event.pull_request.head.repo.full_name == github.repository) ||
|
|
(github.event.label.name == 'maintainer:e2e:ok'))
|
|
runs-on: 'gemini-cli-windows-16-core'
|
|
continue-on-error: true
|
|
|
|
steps:
|
|
- name: 'Checkout (fork)'
|
|
uses: 'actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955' # ratchet:actions/checkout@v5
|
|
if: "github.event_name == 'pull_request_target'"
|
|
with:
|
|
ref: '${{ github.event.pull_request.head.sha }}'
|
|
repository: '${{ github.event.pull_request.head.repo.full_name }}'
|
|
|
|
- name: 'Checkout (internal)'
|
|
uses: 'actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955' # ratchet:actions/checkout@v5
|
|
if: "github.event_name != 'pull_request_target'"
|
|
with:
|
|
ref: '${{ github.event.inputs.branch_ref || github.ref }}'
|
|
|
|
- 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: 'Configure npm for GitHub Packages'
|
|
run: |
|
|
echo "@google-gemini:registry=https://npm.pkg.github.com/" > .npmrc
|
|
echo "//npm.pkg.github.com/:_authToken=${{ secrets.GITHUB_TOKEN }}" >> .npmrc
|
|
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 }}'
|
|
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'
|
|
shell: 'pwsh'
|
|
run: 'npm run test:integration:sandbox:none'
|
|
|
|
e2e:
|
|
name: 'E2E'
|
|
if: |
|
|
always() && (
|
|
github.event_name == 'push' ||
|
|
github.event_name == 'merge_group' ||
|
|
github.event_name == 'workflow_dispatch' ||
|
|
(github.event.pull_request.head.repo.full_name == github.repository) ||
|
|
(github.event.label.name == 'maintainer:e2e:ok')
|
|
)
|
|
needs:
|
|
- 'e2e_linux'
|
|
- 'e2e_mac'
|
|
runs-on: 'gemini-cli-ubuntu-16-core'
|
|
steps:
|
|
- name: 'Check E2E test results'
|
|
run: |
|
|
if [[ (${{ needs.e2e_linux.result }} != 'success' && ${{ needs.e2e_linux.result }} != 'skipped') || \
|
|
(${{ needs.e2e_mac.result }} != 'success' && ${{ needs.e2e_mac.result }} != 'skipped') ]]; then
|
|
echo "One or more E2E jobs failed."
|
|
exit 1
|
|
fi
|
|
echo "All required E2E jobs passed!"
|