Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
22 commits
Select commit Hold shift + click to select a range
2d3e363
test(e2e): migrate credential migration to Vitest
jyaunches Jun 11, 2026
c8daffc
test(e2e): install only OpenShell in credential migration
jyaunches Jun 11, 2026
af52c10
test(e2e): avoid external quota in credential migration
jyaunches Jun 11, 2026
a555cdc
test(e2e): address credential migration review notes
jyaunches Jun 11, 2026
f1f6142
ci(e2e): add credential migration vitest dispatch
jyaunches Jun 11, 2026
f9025a7
Merge remote-tracking branch 'origin/main' into e2e-migrate/test-cred…
jyaunches Jun 11, 2026
26c330a
ci(e2e): report credential migration vitest job
jyaunches Jun 11, 2026
911cb06
Merge branch 'main' into e2e-migrate/test-credential-migration
jyaunches Jun 11, 2026
8992179
fix(e2e): gate credential migration vitest dispatch
jyaunches Jun 11, 2026
8d9760e
Merge branch 'main' into e2e-migrate/test-credential-migration
jyaunches Jun 11, 2026
d4a1db4
Merge branch 'main' into e2e-migrate/test-credential-migration
jyaunches Jun 11, 2026
03189e1
test(e2e): restore default credential migration path
jyaunches Jun 11, 2026
3f4cff4
Merge branch 'main' into e2e-migrate/test-credential-migration
jyaunches Jun 11, 2026
d4b2e49
test(e2e): use lower-quota migration model
jyaunches Jun 11, 2026
d5ddd9c
Merge branch 'main' into e2e-migrate/test-credential-migration
jyaunches Jun 11, 2026
ceab733
Merge branch 'main' into e2e-migrate/test-credential-migration
jyaunches Jun 11, 2026
75045be
Merge branch 'main' into e2e-migrate/test-credential-migration
jyaunches Jun 11, 2026
c9ec2f4
Merge branch 'main' into e2e-migrate/test-credential-migration
jyaunches Jun 11, 2026
e66f36a
Merge branch 'main' into e2e-migrate/test-credential-migration
jyaunches Jun 11, 2026
ea02893
Merge branch 'main' into e2e-migrate/test-credential-migration
jyaunches Jun 11, 2026
64e9d4e
Merge branch 'main' into e2e-migrate/test-credential-migration
jyaunches Jun 11, 2026
905b6c0
Merge branch 'main' into e2e-migrate/test-credential-migration
jyaunches Jun 11, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
83 changes: 81 additions & 2 deletions .github/workflows/e2e-vitest-scenarios.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ jobs:
SCENARIOS: ${{ inputs.scenarios }}
run: |
set -euo pipefail
allowed_jobs="openshell-version-pin-vitest,onboard-negative-paths-vitest,hermes-e2e-vitest,network-policy-vitest,token-rotation-vitest,openclaw-tui-chat-correlation-vitest,gateway-guard-recovery"
allowed_jobs="openshell-version-pin-vitest,onboard-negative-paths-vitest,credential-migration-vitest,hermes-e2e-vitest,network-policy-vitest,token-rotation-vitest,openclaw-tui-chat-correlation-vitest,gateway-guard-recovery"
if [ -n "${JOBS}" ] && [ -n "${SCENARIOS}" ]; then
echo "::error::Use either scenarios or jobs, not both." >&2
exit 1
Expand Down Expand Up @@ -93,7 +93,7 @@ jobs:
SCENARIOS: ${{ inputs.scenarios }}
run: |
set -euo pipefail
allowed_jobs="openshell-version-pin-vitest,onboard-negative-paths-vitest,hermes-e2e-vitest,network-policy-vitest,token-rotation-vitest,openclaw-tui-chat-correlation-vitest,gateway-guard-recovery"
allowed_jobs="openshell-version-pin-vitest,onboard-negative-paths-vitest,credential-migration-vitest,hermes-e2e-vitest,network-policy-vitest,token-rotation-vitest,openclaw-tui-chat-correlation-vitest,gateway-guard-recovery"
args=(--emit-live-matrix)
matrix=""
hermes_selected=false
Expand Down Expand Up @@ -363,6 +363,84 @@ jobs:
if-no-files-found: ignore
retention-days: 14

credential-migration-vitest:
needs: validate-jobs
if: ${{ (inputs.jobs == '' && inputs.scenarios == '') || contains(format(',{0},', inputs.jobs), ',credential-migration-vitest,') }}
runs-on: ubuntu-latest
timeout-minutes: 50
env:
E2E_ARTIFACT_DIR: ${{ github.workspace }}/e2e-artifacts/vitest/credential-migration
NEMOCLAW_CLI_BIN: ${{ github.workspace }}/bin/nemoclaw.js
NEMOCLAW_RUN_E2E_SCENARIOS: "1"
NEMOCLAW_SANDBOX_NAME: "e2e-cred-migration"
steps:
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
with:
persist-credentials: false

- name: Authenticate to Docker Hub
env:
DOCKERHUB_USERNAME: ${{ secrets.DOCKERHUB_USERNAME }}
DOCKERHUB_TOKEN: ${{ secrets.DOCKERHUB_TOKEN }}
shell: bash
run: |
set -euo pipefail
if [[ -z "${DOCKERHUB_USERNAME}" || -z "${DOCKERHUB_TOKEN}" ]]; then
echo "::notice::Docker Hub credentials not configured; continuing with anonymous pulls."
exit 0
fi
login_succeeded=0
for attempt in 1 2 3; do
if echo "${DOCKERHUB_TOKEN}" | timeout 30s docker login docker.io --username "${DOCKERHUB_USERNAME}" --password-stdin; then
login_succeeded=1
break
fi
if [[ "$attempt" -lt 3 ]]; then
echo "::warning::Docker Hub login attempt ${attempt} failed; retrying."
sleep 5
fi
done
if [[ "$login_succeeded" -ne 1 ]]; then
echo "::warning::Docker Hub login failed after 3 attempts; continuing with anonymous pulls."
fi

- name: Set up Node
uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.0.0
with:
node-version: 22
cache: npm

- name: Install root dependencies
run: npm ci --ignore-scripts

- name: Build CLI
run: npm run build:cli

- name: Run credential migration live test
# Migrated from test/e2e/test-credential-migration.sh. This live test
# needs NVIDIA_API_KEY only as the staged legacy credential value; it
# preserves the default NVIDIA provider/key migration path while
# pinning a lower-quota catalog model in the test fixture.
env:
NVIDIA_API_KEY: ${{ secrets.NVIDIA_API_KEY }}
run: |
set -euo pipefail
npx vitest run --project e2e-scenarios-live \
test/e2e-scenario/live/credential-migration.test.ts \
--silent=false --reporter=default

- name: Upload credential migration artifacts
if: always()
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
with:
name: e2e-vitest-scenarios-credential-migration
path: e2e-artifacts/vitest/credential-migration/
include-hidden-files: false
if-no-files-found: ignore
retention-days: 14



hermes-e2e-vitest:
needs: [validate-jobs, generate-matrix]
if: ${{ needs.generate-matrix.outputs.hermes_selected == 'true' }}
Expand Down Expand Up @@ -743,6 +821,7 @@ jobs:
live-scenarios,
openshell-version-pin-vitest,
onboard-negative-paths-vitest,
credential-migration-vitest,
hermes-e2e-vitest,
network-policy-vitest,
token-rotation-vitest,
Expand Down
56 changes: 45 additions & 11 deletions .github/workflows/nightly-e2e.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -1516,17 +1516,51 @@ jobs:
github.repository == 'NVIDIA/NemoClaw' && (github.event_name != 'workflow_dispatch' ||
inputs.jobs == '' ||
contains(format(',{0},', inputs.jobs), ',credential-migration-e2e,'))
uses: ./.github/workflows/e2e-script.yaml
with:
ref: ${{ inputs.target_ref || github.ref }}
script: test/e2e/test-credential-migration.sh
timeout_minutes: 30
artifact_name: "install-log-credential-migration"
artifact_path: "/tmp/nemoclaw-e2e-install.log"
env_json: '{"NEMOCLAW_ACCEPT_THIRD_PARTY_SOFTWARE":"1","NEMOCLAW_NON_INTERACTIVE":"1","NEMOCLAW_RECREATE_SANDBOX":"1","NEMOCLAW_SANDBOX_NAME":"e2e-cred-migration"}'
nvidia_api_key: true
github_token: true
secrets: *nightly-e2e-default-secrets
runs-on: ubuntu-latest
permissions:
contents: read
timeout-minutes: 50
steps:
- *target-ref-checkout

- *dockerhub-auth-step
- name: Setup Node
uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6
with:
node-version: "22"
cache: npm

- name: Install root dependencies
run: npm ci --ignore-scripts

- name: Build CLI
run: npm run build:cli

- name: Run credential migration Vitest test
# Trusted-code boundary: this job runs the checked-out target ref with
# NVIDIA_API_KEY because it validates live credential migration into the
# OpenShell gateway. Keep checkout credentials disabled, do not pass
# GITHUB_TOKEN, and rely on reviewed/maintainer-dispatched refs.
env:
NVIDIA_API_KEY: ${{ secrets.NVIDIA_API_KEY }}
E2E_ARTIFACT_DIR: ${{ github.workspace }}/e2e-artifacts/vitest/credential-migration
NEMOCLAW_RUN_E2E_SCENARIOS: "1"
NEMOCLAW_SANDBOX_NAME: "e2e-cred-migration"
run: |
set -euo pipefail
npx vitest run --project e2e-scenarios-live \
test/e2e-scenario/live/credential-migration.test.ts \
--silent=false --reporter=default

- name: Upload credential migration artifacts
if: always()
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
with:
name: credential-migration-artifacts
path: e2e-artifacts/vitest/credential-migration/
include-hidden-files: false
if-no-files-found: ignore
retention-days: 14
snapshot-commands-e2e:
if: >-
github.repository == 'NVIDIA/NemoClaw' && (github.event_name != 'workflow_dispatch' ||
Expand Down
Loading
Loading