Skip to content
Merged
Show file tree
Hide file tree
Changes from 14 commits
Commits
Show all changes
40 commits
Select commit Hold shift + click to select a range
48a3200
ci(e2e): add Colossus-backed Jetson dispatch
sandl99 Aug 10, 2026
eaf3d6f
test(e2e): keep Jetson completion polling linear
sandl99 Aug 10, 2026
6bb1464
fix(e2e): pin Jetson dispatcher deployment commit
sandl99 Aug 10, 2026
4b65478
docs(e2e): clarify Jetson dispatch code authority
sandl99 Aug 10, 2026
6969ab3
fix(e2e): harden Jetson dispatch boundaries
sandl99 Aug 10, 2026
b4220a4
docs(e2e): clarify v1 Jetson receipt policy
sandl99 Aug 10, 2026
b6f69f8
fix(e2e): align Jetson dispatch evidence bounds
sandl99 Aug 10, 2026
56c04d9
fix(e2e): preserve Jetson dispatch failure evidence
sandl99 Aug 10, 2026
f3d739c
fix(e2e): retain successful Jetson test output
sandl99 Aug 10, 2026
6b07355
fix(e2e): bound Jetson dispatch cleanup
sandl99 Aug 10, 2026
03b9200
fix(e2e): preserve Jetson cleanup recovery
sandl99 Aug 10, 2026
7ea3c9a
fix(e2e): retain Jetson cleanup identities
sandl99 Aug 10, 2026
8563f66
fix(e2e): persist failed Jetson cleanup evidence
sandl99 Aug 10, 2026
0cd689a
fix(e2e): fsync Jetson cleanup evidence
sandl99 Aug 10, 2026
2b3eff1
fix(e2e): isolate Jetson OpenShell lifecycle
sandl99 Aug 10, 2026
c6bf59e
fix(e2e): make Jetson cleanup fail closed
sandl99 Aug 10, 2026
80db10d
test(e2e): keep Jetson lock failure setup linear
sandl99 Aug 10, 2026
96689df
feat(e2e): deploy Colossus Jetson dispatcher releases
sandl99 Aug 10, 2026
938473a
fix(e2e): make Colossus deploy checks explicit
sandl99 Aug 10, 2026
4212484
fix(e2e): restore completed Jetson dispatches
sandl99 Aug 10, 2026
4ad5e19
fix(e2e): retain Jetson lock until result persists
sandl99 Aug 10, 2026
6177017
test(e2e): remove stale Jetson import
sandl99 Aug 10, 2026
b632e2a
merge: reconcile Jetson dispatch with current main
sandl99 Aug 11, 2026
c458c5c
fix(e2e): plan Jetson dispatch without shared targets
sandl99 Aug 11, 2026
95201e8
fix(installer): restore preflight CI contracts
sandl99 Aug 11, 2026
1220345
feat(e2e): bootstrap Colossus dispatcher service
sandl99 Aug 11, 2026
d24ee49
fix(e2e): clarify deployment guard control flow
sandl99 Aug 11, 2026
5df6a3b
Merge branch 'main' into ci/jetson-colossus-dispatch
cv Aug 11, 2026
64e6477
Merge branch 'main' into ci/jetson-colossus-dispatch
cv Aug 11, 2026
586ef74
fix(e2e): incorporate Jetson POC findings
sandl99 Aug 11, 2026
1d621d9
Merge branch 'main' into ci/jetson-colossus-dispatch
cv Aug 11, 2026
888005c
test(e2e): keep Jetson helper linear
sandl99 Aug 11, 2026
b759dfd
fix(e2e): define cleanup phase process guard
sandl99 Aug 11, 2026
032694d
fix(e2e): bound Jetson teardown probes
sandl99 Aug 11, 2026
f9fbd30
docs(e2e): clarify Jetson key removal failure
sandl99 Aug 11, 2026
f51ebec
Merge branch 'main' into ci/jetson-colossus-dispatch
cv Aug 11, 2026
14b4126
merge: resolve conflicts with main
github-actions[bot] Aug 11, 2026
77f0410
fix(e2e): preserve Jetson dispatch containment
prekshivyas Aug 11, 2026
fcfe7dc
test(e2e): keep dispatch recovery tests linear
prekshivyas Aug 11, 2026
540c9c0
fix(e2e): complete Jetson dispatch containment
sandl99 Aug 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
4 changes: 2 additions & 2 deletions .agents/skills/nemoclaw-maintainer-cut-release-tag/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -136,7 +136,7 @@ npm run release:e2e-evidence -- \

The preflight derives every required execution from one empty-selector dispatch.
The full run includes every default-selected workflow E2E plus `Exact staging Brev Launchable`.
Accepted release evidence requires `allow_jetson_runner_queue=false` and `allow_dgx_spark_runner_queue=false`.
Accepted release evidence requires `allowJetsonDispatch: false`, `allowJetsonRunnerQueue: false`, and `allowDgxSparkRunnerQueue: false`.
The required denominator excludes `jetson-nvmap-gpu`, `llama-cpp-dgx-spark-plan`, and `llama-cpp-dgx-spark-qualification`.
Each job that declares `RELEASE_E2E_ACTIVATION_PATH` requires that path at the candidate SHA.
A missing activation path is a preflight failure.
Expand All @@ -148,7 +148,7 @@ Monitor the dispatched correlation ID with one bounded status query.
Before accepting full-mode exact Brev evidence, require:

- the workflow `head_sha` to equal the plan candidate SHA;
- the trusted dispatch receipt to prove empty selectors, `include_staging_brev_launchable=true`, `allowJetsonRunnerQueue: false`, and `allowDgxSparkRunnerQueue: false`;
- the trusted dispatch receipt to prove empty selectors, `include_staging_brev_launchable=true`, `allowJetsonRunnerQueue: false`, and `allowDgxSparkRunnerQueue: false`; a v1 receipt may omit `allowJetsonDispatch` but must set it to `false` when present, while a v2 receipt must include `allowJetsonDispatch: false`;
- the workflow conclusion to be `success`;
- the `Exact staging Brev Launchable` job conclusion to be `success`;
- the job URL and selected successful Launchable job attempt;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -484,6 +484,16 @@ export function buildReleaseE2eLedger(
false,
`${label}.dispatch.allowJetsonRunnerQueue`,
);
if (
dispatch.kind === "nemoclaw-e2e-dispatch-v2" ||
Object.hasOwn(dispatch, "allowJetsonDispatch")
) {
requireEqual(
booleanField(dispatch, "allowJetsonDispatch", `${label}.dispatch`),
false,
`${label}.dispatch.allowJetsonDispatch`,
);
}
requireEqual(
booleanField(dispatch, "allowDgxSparkRunnerQueue", `${label}.dispatch`),
false,
Expand Down
2 changes: 1 addition & 1 deletion .agents/skills/nemoclaw-maintainer-day/MERGE-GATE.md
Original file line number Diff line number Diff line change
Expand Up @@ -85,7 +85,7 @@ After a failure, inspect the artifacts and remove resources that target cleanup

Dispatch the trusted `main` workflow with the current PR number, lowercase 40-character head SHA, head repository, lowercase 40-character base SHA, trusted workflow SHA, and a review reason containing 10 to 500 printable characters.
Leave job and target selectors empty and keep Launchable disabled.
Keep `allow_jetson_runner_queue=false` and `allow_dgx_spark_runner_queue=false` for the default PR revision selection.
Keep `allow_jetson_dispatch=false` and `allow_dgx_spark_runner_queue=false` for the default PR revision selection.
If the DGX Spark flag is `true`, GitHub can pause `llama-cpp-dgx-spark-qualification` for the `approve-dgx-spark-image-qualification` environment.
An authorized environment reviewer must approve it before qualification starts.
The trusted pre-checkout step requires current `maintain` or `admin` access and validates the exact open PR before candidate code runs.
Expand Down
35 changes: 22 additions & 13 deletions .agents/skills/nemoclaw-maintainer-e2e/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,8 @@ Choose exactly one mode:
- every default-selected free-standing workflow E2E except `Exact staging Brev Launchable`;
- every shared credential-free test; and
- these controller-selected registry targets: `ubuntu-policy-custom-missing-presets-negative`, `ubuntu-repo-cloud-langchain-deepagents-code`, `ubuntu-repo-cloud-openclaw`, and `ubuntu-repo-docker-post-reboot-recovery`.
The run skips `jetson-nvmap-gpu`, `llama-cpp-dgx-spark-plan`, and `llama-cpp-dgx-spark-qualification` unless their separate runner-queue flags are `true`.
The run skips `jetson-nvmap-gpu` unless its Colossus dispatch flag is `true`.
It skips `llama-cpp-dgx-spark-plan` and `llama-cpp-dgx-spark-qualification` unless their runner-queue flag is `true`.
- For protected managed-image runtime qualification, set `E2E_JOBS=managed-image-protected-runtime`. The exact candidate must contain `ci/protected-managed-image-multiarch-activation-v1.json` and `ci/protected-managed-image-runtime-activation-v1.json`.

Leave `targets` empty and keep Launchable disabled:
Expand All @@ -81,7 +82,7 @@ esac
REVIEW_REASON='Reviewed the PR head commit for credentialed E2E.'
CORRELATION_ID="$(python3 -c 'import uuid; print(uuid.uuid4())')"
INFERENCE_MODE=mock
ALLOW_JETSON_RUNNER_QUEUE=false
ALLOW_JETSON_DISPATCH=false
ALLOW_DGX_SPARK_RUNNER_QUEUE=false
gh workflow run .github/workflows/e2e.yaml \
--repo NVIDIA/NemoClaw \
Expand All @@ -90,7 +91,7 @@ gh workflow run .github/workflows/e2e.yaml \
-f "jobs=${E2E_JOBS}" \
-f "inference_mode=${INFERENCE_MODE}" \
-f include_staging_brev_launchable=false \
-f "allow_jetson_runner_queue=${ALLOW_JETSON_RUNNER_QUEUE}" \
-f "allow_jetson_dispatch=${ALLOW_JETSON_DISPATCH}" \
-f "allow_dgx_spark_runner_queue=${ALLOW_DGX_SPARK_RUNNER_QUEUE}" \
-f "pr_number=${PR_NUMBER}" \
-f "checkout_sha=${HEAD_SHA}" \
Expand Down Expand Up @@ -162,7 +163,7 @@ Ask for clarification only when the request contains conflicting mode phrases.
Ordinary mode selects every default-selected workflow E2E except `Exact staging Brev Launchable`.
Launchable mode runs only `Exact staging Brev Launchable`.
Full mode adds `Exact staging Brev Launchable` to the default E2E selection in the same workflow run.
The documented invocations for all three modes keep both hardware runner-queue flags set to `false`.
The documented invocations for all three modes keep the Jetson dispatch and DGX Spark runner-queue flags set to `false`.

## Resolve the Candidate

Expand Down Expand Up @@ -199,7 +200,7 @@ gh workflow run .github/workflows/e2e.yaml \
-f jobs= \
-f inference_mode=mock \
-f include_staging_brev_launchable=false \
-f allow_jetson_runner_queue=false \
-f allow_jetson_dispatch=false \
-f allow_dgx_spark_runner_queue=false \
-f "correlation_id=${CORRELATION_ID}"
```
Expand All @@ -214,7 +215,7 @@ gh workflow run .github/workflows/e2e.yaml \
-f jobs=staging-brev-launchable \
-f inference_mode=mock \
-f include_staging_brev_launchable=false \
-f allow_jetson_runner_queue=false \
-f allow_jetson_dispatch=false \
-f allow_dgx_spark_runner_queue=false \
-f "correlation_id=${CORRELATION_ID}"
```
Expand All @@ -229,7 +230,7 @@ gh workflow run .github/workflows/e2e.yaml \
-f jobs= \
-f inference_mode=mock \
-f include_staging_brev_launchable=true \
-f allow_jetson_runner_queue=false \
-f allow_jetson_dispatch=false \
-f allow_dgx_spark_runner_queue=false \
-f "correlation_id=${CORRELATION_ID}"
```
Expand All @@ -240,11 +241,14 @@ The `include_staging_brev_launchable` input adds the Launchable E2E job to that
The trusted `main` workflow verifies that the dispatching and rerunning actors have
repository `maintain` or `admin` permission before the Launchable path's source
checkout. That role check is the authorization.
A user permitted to dispatch this workflow may set
`allow_jetson_runner_queue=true` to add `jetson-nvmap-gpu` to an empty-selector
manual run or enable its explicit selection. Set it only after a repository
administrator confirms an online Jetson runner in the authoritative runner
inventory.
A user permitted to dispatch this workflow may set `allow_jetson_dispatch=true`
to add `jetson-nvmap-gpu` to an empty-selector manual run or enable its explicit
selection. Set it only after every deployment check in
[Jetson Dispatch Through Colossus](../../../test/e2e/docs/jetson-colossus-dispatch.md)
passes.
The Jetson lifecycle removes and verifies only its fixed job-owned cleanup
allowlist. Do not treat `cleanup: "succeeded"` as evidence that every possible
candidate host change was reversed.
A permitted dispatcher may set `allow_dgx_spark_runner_queue=true` to add
`llama-cpp-dgx-spark-plan` and `llama-cpp-dgx-spark-qualification` to an
empty-selector manual run or enable explicit qualification selection. Set it
Expand Down Expand Up @@ -350,6 +354,8 @@ The validator requires:

- the workflow run to succeed for the selected SHA;
- `dispatch.json` to bind the same run, empty selectors, `include_staging_brev_launchable=true`, `allowJetsonRunnerQueue: false`, `allowDgxSparkRunnerQueue: false`, and the selected successful Launchable job attempt;
- `allowJetsonDispatch: false` in every v2 `dispatch.json` receipt;
- `allowJetsonDispatch` to be absent or `false` in every v1 `dispatch.json` receipt;
- `Exact staging Brev Launchable` to conclude `success` in the selected current or earlier attempt of the same workflow run;
- `launchable-e2e.json` to identify the selected SHA in the repository and provision records;
- the booted repository to be unmodified;
Expand All @@ -376,7 +382,10 @@ If the release candidate SHA changes, discard the earlier full run and dispatch
No release-note-only delta exception is currently defined.

When `nemoclaw-maintainer-cut-release-tag` invokes this skill, return the validated fields for its pre-tag E2E evidence ledger.
The trusted `dispatch.json` receipt proves that full mode used empty selectors, included `Exact staging Brev Launchable`, and disabled both optional hardware paths.
The trusted `dispatch.json` receipt proves that full mode used empty selectors and included `Exact staging Brev Launchable`.
For Jetson dispatch, a v2 receipt requires `allowJetsonDispatch: false`.
A v1 receipt may omit `allowJetsonDispatch`, but it must be `false` when present.
Both receipt versions require the optional DGX Spark runner path to be disabled.
The release evidence ledger proves the result of each workflow E2E.
Do not ask for the release confirmation phrase in this skill.

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ export interface FullE2eEvidenceSummary {
};
dispatch: {
allowDgxSparkRunnerQueue: false;
allowJetsonDispatch: false;
allowJetsonRunnerQueue: false;
emptySelectors: true;
includeStagingBrevLaunchable: true;
Expand Down Expand Up @@ -166,6 +167,9 @@ export function validateFullE2eEvidence(input: FullE2eEvidenceInput): FullE2eEvi
"dispatch.includeStagingBrevLaunchable",
);
requireEqual(dispatch.allowJetsonRunnerQueue, false, "dispatch.allowJetsonRunnerQueue");
if (dispatch.kind === "nemoclaw-e2e-dispatch-v2" || Object.hasOwn(dispatch, "allowJetsonDispatch")) {
requireEqual(dispatch.allowJetsonDispatch, false, "dispatch.allowJetsonDispatch");
}
requireEqual(dispatch.allowDgxSparkRunnerQueue, false, "dispatch.allowDgxSparkRunnerQueue");
requireEqual(dispatch.emptySelectors, true, "dispatch.emptySelectors");

Expand Down Expand Up @@ -233,6 +237,7 @@ export function validateFullE2eEvidence(input: FullE2eEvidenceInput): FullE2eEvi
},
dispatch: {
allowDgxSparkRunnerQueue: false,
allowJetsonDispatch: false,
allowJetsonRunnerQueue: false,
emptySelectors: true,
includeStagingBrevLaunchable: true,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ Before asking for the release confirmation phrase, build and show an evidence le
- Require the workflow-produced trusted dispatch receipt to bind the accepted run candidate SHA, run ID, attempt, and selector inputs.
- Run `nemoclaw-maintainer-e2e` in full mode when the ledger lacks complete evidence for the candidate SHA.
- Require one completed, successful full workflow run for all default-selected workflow E2E jobs and the full-mode additions, including `Exact staging Brev Launchable`.
- Require the trusted dispatch receipt to record `allowJetsonRunnerQueue: false` and `allowDgxSparkRunnerQueue: false`.
- Require the trusted dispatch receipt to record `allowJetsonRunnerQueue: false` and `allowDgxSparkRunnerQueue: false`. A v1 receipt may omit `allowJetsonDispatch` but must record `false` when the field is present. A v2 receipt must record `allowJetsonDispatch: false`.
- Exclude `jetson-nvmap-gpu`, `llama-cpp-dgx-spark-plan`, and `llama-cpp-dgx-spark-qualification` from the required denominator.
- Require the trusted dispatch receipt to bind the workflow run and an attempt no later than the run's latest attempt. The receipt must record empty selectors and `include_staging_brev_launchable=true`.
- Require the Launchable E2E receipt to identify the candidate SHA in the repository and provision records.
Expand Down
85 changes: 28 additions & 57 deletions .github/workflows/e2e.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ on:
default: ""
type: string
jobs:
description: "Optional comma-separated E2E test IDs. Empty selectors choose the default suite. Set include_staging_brev_launchable for Launchable. Jetson and DGX Spark require their queue flags. PR revisions use the trusted controller matrix."
description: "Optional comma-separated E2E test IDs. Empty selectors choose the default suite. Set include_staging_brev_launchable for Launchable. Jetson dispatch and DGX Spark require their opt-in flags. PR revisions use the trusted controller matrix."
required: false
default: ""
type: string
Expand All @@ -33,8 +33,8 @@ on:
- mock
- internal-nvidia
- public-nvidia
allow_jetson_runner_queue:
description: "Before setting true for jetson-nvmap-gpu, obtain repository administrator confirmation of an online Jetson runner in the authoritative NVIDIA/NemoClaw Settings -> Actions -> Runners inventory; queued jobs do not honor timeout-minutes before assignment."
allow_jetson_dispatch:
description: "Set true for jetson-nvmap-gpu only after the Colossus dispatcher, Cloudflare Tunnel, cleanup helper, and JETSON_DISPATCH_URL repository variable have passed the deployment checks in test/e2e/docs/jetson-colossus-dispatch.md."
required: false
default: false
type: boolean
Expand Down Expand Up @@ -304,7 +304,8 @@ jobs:
if: ${{ github.event_name == 'workflow_dispatch' }}
env:
ALLOW_DGX_SPARK_RUNNER_QUEUE: ${{ inputs.allow_dgx_spark_runner_queue && 'true' || 'false' }}
ALLOW_JETSON_RUNNER_QUEUE: ${{ inputs.allow_jetson_runner_queue && 'true' || 'false' }}
ALLOW_JETSON_DISPATCH: ${{ inputs.allow_jetson_dispatch && 'true' || 'false' }}
ALLOW_JETSON_RUNNER_QUEUE: "false"
BASE_SHA: ${{ inputs.checkout_sha != '' && inputs.base_sha || github.sha }}
CANDIDATE_REPOSITORY: ${{ inputs.checkout_repository || github.repository }}
CANDIDATE_SHA: ${{ inputs.checkout_sha || github.sha }}
Expand Down Expand Up @@ -334,6 +335,7 @@ jobs:
--arg workflowRunId "$RUN_ID" \
--arg workflowSha "$WORKFLOW_SHA" \
--argjson allowDgxSparkRunnerQueue "$ALLOW_DGX_SPARK_RUNNER_QUEUE" \
--argjson allowJetsonDispatch "$ALLOW_JETSON_DISPATCH" \
--argjson allowJetsonRunnerQueue "$ALLOW_JETSON_RUNNER_QUEUE" \
--argjson includeStagingBrevLaunchable "$INCLUDE_STAGING_BREV_LAUNCHABLE" \
--argjson workflowRunAttempt "$RUN_ATTEMPT" \
Expand All @@ -351,6 +353,7 @@ jobs:
jobs: $jobs,
targets: $targets,
allowDgxSparkRunnerQueue: $allowDgxSparkRunnerQueue,
allowJetsonDispatch: $allowJetsonDispatch,
allowJetsonRunnerQueue: $allowJetsonRunnerQueue,
includeStagingBrevLaunchable: $includeStagingBrevLaunchable,
emptySelectors: ($jobs == "" and $targets == "")
Expand Down Expand Up @@ -4918,70 +4921,38 @@ jobs:

jetson-nvmap-gpu:
needs: generate-matrix
# The opt-in flag prevents assignment to an unavailable Jetson runner.
if: ${{ inputs.allow_jetson_runner_queue && github.repository == 'NVIDIA/NemoClaw' && github.ref == 'refs/heads/main' && ((github.event_name != 'workflow_dispatch' || (inputs.jobs == '' && inputs.targets == '')) || contains(format(',{0},', inputs.jobs), ',jetson-nvmap-gpu,') || contains(format(',{0},', inputs.targets), ',jetson-nvmap-gpu,')) }}
runs-on: ${{ vars.JETSON_E2E_RUNNER_LABEL || 'linux-arm64-gpu-jetson-orin-latest-1' }}
if: ${{ inputs.allow_jetson_dispatch && github.repository == 'NVIDIA/NemoClaw' && github.ref == 'refs/heads/main' && github.event_name == 'workflow_dispatch' && (inputs.checkout_repository == '' || inputs.checkout_repository == github.repository) && ((inputs.jobs == '' && inputs.targets == '') || contains(format(',{0},', inputs.jobs), ',jetson-nvmap-gpu,') || contains(format(',{0},', inputs.targets), ',jetson-nvmap-gpu,')) }}
runs-on: ubuntu-latest
timeout-minutes: 60
env:
E2E_JOB: "1"
E2E_TARGET_ID: "jetson-nvmap-gpu"
E2E_ARTIFACT_DIR: ${{ github.workspace }}/e2e-artifacts/live/jetson-nvmap-gpu
NEMOCLAW_CLI_BIN: ${{ github.workspace }}/bin/nemoclaw.js
NEMOCLAW_RUN_LIVE_E2E: "1"
NEMOCLAW_NON_INTERACTIVE: "1"
NEMOCLAW_ACCEPT_THIRD_PARTY_SOFTWARE: "1"
NEMOCLAW_SANDBOX_NAME: "e2e-jetson-nvmap"
NEMOCLAW_RECREATE_SANDBOX: "1"
NEMOCLAW_PROVIDER: "ollama"
OPENSHELL_GATEWAY: "nemoclaw"
permissions:
contents: read
id-token: write
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
- name: Check out trusted Jetson controller
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
repository: ${{ inputs.checkout_repository || github.repository }}
ref: ${{ inputs.checkout_sha || github.sha }}
repository: NVIDIA/NemoClaw
ref: ${{ github.workflow_sha }}
persist-credentials: false

- *dockerhub-auth

- name: Prepare E2E workspace
uses: NVIDIA/NemoClaw/.github/actions/prepare-e2e@f6304bc25fc35bfaa441c8c2fbfee38f72805a75
with:
build-cli: "false"

- name: Restore exact-commit CLI artifact
uses: NVIDIA/NemoClaw/.github/actions/restore-e2e-cli-artifact@c246409193a31133cab10c8a3589001cc0d59eb3
- name: Set up Node for Jetson controller
uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
with:
provenance-json: ${{ needs.generate-matrix.outputs.cli_artifact_provenance }}

- name: Verify Jetson GPU availability
run: |
set -euo pipefail
echo "=== Tegra release ==="
cat /etc/nv_tegra_release 2>/dev/null || echo "(no /etc/nv_tegra_release)"
echo ""
echo "=== /dev/nvmap ==="
ls -l /dev/nvmap 2>/dev/null || echo "(no /dev/nvmap)"
echo ""
echo "=== Docker ==="
docker info --format '{{.ServerVersion}}'
docker info --format '{{json .Runtimes}}'
node-version: 22

- name: Run Jetson nvmap GPU live Vitest test
# Keeps the
# Jetson/Tegra host, NVIDIA Docker runtime, install.sh, OpenShell
# sandbox exec, /dev/nvmap, CUDA cuInit(0), and status-proof boundary.
run: |
set -euo pipefail
npx tsx tools/e2e/live-vitest-invocation.mts run --test-path test/e2e/live/jetson-nvmap-gpu.test.ts
- name: Dispatch exact commit to Jetson through Colossus
env:
E2E_ARTIFACT_DIR: ${{ runner.temp }}/e2e-artifacts/live/jetson-nvmap-gpu
JETSON_DISPATCH_CANDIDATE_SHA: ${{ inputs.checkout_sha || github.sha }}
JETSON_DISPATCH_URL: ${{ vars.JETSON_DISPATCH_URL }}
run: node --experimental-strip-types --no-warnings tools/e2e/jetson-dispatch-client.mts

- name: Upload Jetson nvmap GPU artifacts
if: always()
uses: NVIDIA/NemoClaw/.github/actions/upload-e2e-artifacts@7768e15eb90d3ee2d33432f481dfe8747e4f6d57

- name: Clean up Docker auth
if: always()
shell: bash
run: bash .github/scripts/docker-auth-cleanup.sh
with:
name: e2e-jetson-nvmap-gpu
path: ${{ runner.temp }}/e2e-artifacts/live/jetson-nvmap-gpu/

concurrent-gateway-ports:
needs: generate-matrix
Expand Down
Loading
Loading