Skip to content

Commit 3a86bfe

Browse files
committed
test(e2e): run conformance in gateway lanes
Signed-off-by: Evan Lezar <elezar@nvidia.com>
1 parent dfbbc11 commit 3a86bfe

16 files changed

Lines changed: 299 additions & 117 deletions

.github/actions/setup-e2e-cli/action.yml

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,11 @@
11
name: Setup E2E CLI
2-
description: Download an architecture-matched prebuilt OpenShell CLI for E2E tests
2+
description: Download architecture-matched prebuilt OpenShell host CLIs for E2E tests
3+
4+
inputs:
5+
conformance-artifact-prefix:
6+
description: Optional conformance CLI artifact name prefix; linux-<arch> is appended automatically
7+
required: false
8+
default: ""
39

410
runs:
511
using: composite
@@ -17,3 +23,24 @@ runs:
1723
chmod +x "$cli"
1824
"$cli" --version
1925
echo "OPENSHELL_BIN=$cli" >> "$GITHUB_ENV"
26+
27+
- name: Download prebuilt conformance CLI
28+
if: inputs.conformance-artifact-prefix != ''
29+
uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
30+
with:
31+
name: ${{ format('{0}-{1}', inputs.conformance-artifact-prefix, runner.arch == 'X64' && 'x86_64-unknown-linux-musl' || 'aarch64-unknown-linux-musl') }}
32+
path: .e2e/prebuilt-conformance
33+
34+
- name: Configure prebuilt conformance CLI
35+
if: inputs.conformance-artifact-prefix != ''
36+
shell: bash
37+
run: |
38+
set -euo pipefail
39+
conformance="$GITHUB_WORKSPACE/.e2e/prebuilt-conformance/openshell-conformance"
40+
if [[ ! -f "$conformance" ]]; then
41+
echo "downloaded artifact is missing $conformance" >&2
42+
exit 1
43+
fi
44+
chmod +x "$conformance"
45+
"$conformance" list --output json >/dev/null
46+
echo "OPENSHELL_CONFORMANCE_BIN=$conformance" >> "$GITHUB_ENV"

.github/workflows/branch-e2e.yml

Lines changed: 52 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,31 @@ jobs:
105105
cargo-version: ${{ needs.version.outputs.cargo }}
106106
secrets: inherit
107107

108+
build-conformance:
109+
needs: [pr_metadata, version]
110+
if: needs.pr_metadata.outputs.should_run == 'true' && needs.pr_metadata.outputs.run_any_e2e == 'true'
111+
permissions:
112+
contents: read
113+
strategy:
114+
matrix:
115+
include:
116+
- triple: x86_64-unknown-linux-musl
117+
runner: linux-amd64-cpu8
118+
dev_shell: .#devShells.x86_64-linux.musl
119+
- triple: aarch64-unknown-linux-musl
120+
runner: linux-arm64-cpu8
121+
dev_shell: .#devShells.aarch64-linux.musl
122+
uses: ./.github/workflows/build-binaries.yml
123+
with:
124+
package: openshell-conformance-cli
125+
binary: openshell-conformance
126+
artifact-name: openshell-conformance-${{ matrix.triple }}
127+
triple: ${{ matrix.triple }}
128+
runner: ${{ matrix.runner }}
129+
dev-shell: ${{ matrix.dev_shell }}
130+
cargo-version: ${{ needs.version.outputs.cargo }}
131+
secrets: inherit
132+
108133
build-sandbox:
109134
needs: version
110135
permissions:
@@ -241,7 +266,7 @@ jobs:
241266
secrets: inherit
242267

243268
docker-e2e:
244-
needs: [pr_metadata, build-cli, build-gateway, build-supervisor-image]
269+
needs: [pr_metadata, build-cli, build-conformance, build-gateway, build-supervisor-image]
245270
if: needs.pr_metadata.outputs.should_run == 'true' && needs.pr_metadata.outputs.run_core_e2e == 'true'
246271
permissions:
247272
actions: read
@@ -251,9 +276,10 @@ jobs:
251276
with:
252277
image-tag: ${{ github.sha }}
253278
runner: linux-arm64-cpu8
279+
conformance-artifact-prefix: openshell-conformance
254280

255281
podman-e2e:
256-
needs: [pr_metadata, build-cli, build-gateway, build-supervisor-image]
282+
needs: [pr_metadata, build-cli, build-conformance, build-gateway, build-supervisor-image]
257283
if: needs.pr_metadata.outputs.should_run == 'true' && needs.pr_metadata.outputs.run_core_e2e == 'true'
258284
permissions:
259285
actions: read
@@ -262,18 +288,21 @@ jobs:
262288
uses: ./.github/workflows/e2e-podman-test.yml
263289
with:
264290
image-tag: ${{ github.sha }}
291+
conformance-artifact-prefix: openshell-conformance
265292

266293
vm-e2e:
267-
needs: [pr_metadata, build-cli, build-gateway, build-vm-driver]
294+
needs: [pr_metadata, build-cli, build-conformance, build-gateway, build-vm-driver]
268295
if: needs.pr_metadata.outputs.should_run == 'true' && needs.pr_metadata.outputs.run_core_e2e == 'true'
269296
permissions:
270297
actions: read
271298
contents: read
272299
packages: read
273300
uses: ./.github/workflows/e2e-vm-test.yml
301+
with:
302+
conformance-artifact-prefix: openshell-conformance
274303

275304
docker-external-driver-e2e:
276-
needs: [pr_metadata, build-cli, build-gateway-plain, build-driver-docker, build-supervisor-image]
305+
needs: [pr_metadata, build-cli, build-conformance, build-gateway-plain, build-driver-docker, build-supervisor-image]
277306
if: needs.pr_metadata.outputs.should_run == 'true' && needs.pr_metadata.outputs.run_core_e2e == 'true'
278307
permissions:
279308
actions: read
@@ -285,11 +314,12 @@ jobs:
285314
runner: linux-arm64-cpu8
286315
gateway-artifact: openshell-gateway-plain-aarch64-unknown-linux-gnu
287316
external-driver-binary: openshell-driver-docker
317+
conformance-artifact-prefix: openshell-conformance
288318
suite-matrix: >-
289319
[{"suite":"external-driver","cmd":"mise run --no-deps --skip-deps e2e:docker:external-driver","apt_packages":"openssh-client","python_proto":false,"mcp":false}]
290320
291321
podman-external-driver-e2e:
292-
needs: [pr_metadata, build-cli, build-gateway-plain, build-driver-podman, build-supervisor-image]
322+
needs: [pr_metadata, build-cli, build-conformance, build-gateway-plain, build-driver-podman, build-supervisor-image]
293323
if: needs.pr_metadata.outputs.should_run == 'true' && needs.pr_metadata.outputs.run_core_e2e == 'true'
294324
permissions:
295325
actions: read
@@ -300,11 +330,12 @@ jobs:
300330
image-tag: ${{ github.sha }}
301331
gateway-artifact: openshell-gateway-plain-x86_64-unknown-linux-gnu
302332
external-driver-binary: openshell-driver-podman
333+
conformance-artifact-prefix: openshell-conformance
303334
suite-matrix: >-
304335
[{"suite":"external-driver","runner":"ubuntu-26.04","podman_major":"5","podman_package_version":"5.7.0+ds2-3build1","conmon_package_version":"2.1.13+ds1-2","cmd":"mise run --no-deps --skip-deps e2e:podman:external-driver"}]
305336
306337
vm-external-driver-e2e:
307-
needs: [pr_metadata, build-cli, build-gateway-plain, build-vm-driver]
338+
needs: [pr_metadata, build-cli, build-conformance, build-gateway-plain, build-vm-driver]
308339
if: needs.pr_metadata.outputs.should_run == 'true' && needs.pr_metadata.outputs.run_core_e2e == 'true'
309340
permissions:
310341
actions: read
@@ -315,9 +346,10 @@ jobs:
315346
gateway-artifact: openshell-gateway-plain-x86_64-unknown-linux-gnu
316347
suite-name: external-driver
317348
e2e-task: e2e:vm:external-driver
349+
conformance-artifact-prefix: openshell-conformance
318350

319351
gpu-e2e:
320-
needs: [pr_metadata, build-cli, build-gateway, build-supervisor-image]
352+
needs: [pr_metadata, build-cli, build-conformance, build-gateway, build-supervisor-image]
321353
if: needs.pr_metadata.outputs.should_run == 'true' && needs.pr_metadata.outputs.run_gpu_e2e == 'true'
322354
permissions:
323355
actions: read
@@ -326,9 +358,10 @@ jobs:
326358
uses: ./.github/workflows/e2e-gpu-test.yaml
327359
with:
328360
image-tag: ${{ github.sha }}
361+
conformance-artifact-prefix: openshell-conformance
329362

330363
kubernetes-e2e:
331-
needs: [pr_metadata, build-cli, build-gateway-image, build-supervisor-image]
364+
needs: [pr_metadata, build-cli, build-conformance, build-gateway-image, build-supervisor-image]
332365
if: needs.pr_metadata.outputs.should_run == 'true' && needs.pr_metadata.outputs.run_core_e2e == 'true'
333366
strategy:
334367
fail-fast: false
@@ -356,9 +389,10 @@ jobs:
356389
job-name: Kubernetes E2E (Rust smoke, ${{ matrix.topology }}, Agent Sandbox ${{ matrix.agent_sandbox_api }})
357390
agent-sandbox-version: ${{ matrix.agent_sandbox_version }}
358391
extra-helm-values: ${{ matrix.extra_helm_values }}
392+
conformance-artifact-prefix: openshell-conformance
359393

360394
kubernetes-workspace-managed-e2e:
361-
needs: [pr_metadata, build-cli, build-gateway-image, build-supervisor-image]
395+
needs: [pr_metadata, build-cli, build-conformance, build-gateway-image, build-supervisor-image]
362396
if: needs.pr_metadata.outputs.should_run == 'true' && needs.pr_metadata.outputs.run_core_e2e == 'true'
363397
permissions:
364398
actions: read
@@ -369,9 +403,10 @@ jobs:
369403
image-tag: ${{ github.sha }}
370404
job-name: Kubernetes E2E (workspace managed mode)
371405
e2e-task: e2e:kubernetes:workspace-managed
406+
conformance-artifact-prefix: openshell-conformance
372407

373408
kubernetes-external-driver-e2e:
374-
needs: [pr_metadata, build-cli, build-gateway-plain, build-driver-kubernetes, build-supervisor-image]
409+
needs: [pr_metadata, build-cli, build-conformance, build-gateway-plain, build-driver-kubernetes, build-supervisor-image]
375410
if: needs.pr_metadata.outputs.should_run == 'true' && needs.pr_metadata.outputs.run_core_e2e == 'true'
376411
permissions:
377412
actions: read
@@ -385,9 +420,10 @@ jobs:
385420
gateway-artifact: openshell-gateway-plain-x86_64-unknown-linux-gnu
386421
external-driver-binary: openshell-driver-kubernetes
387422
cluster-images: supervisor
423+
conformance-artifact-prefix: openshell-conformance
388424

389425
kubernetes-workspace-operator-e2e:
390-
needs: [pr_metadata, build-cli, build-gateway-image, build-supervisor-image]
426+
needs: [pr_metadata, build-cli, build-conformance, build-gateway-image, build-supervisor-image]
391427
if: needs.pr_metadata.outputs.should_run == 'true' && needs.pr_metadata.outputs.run_core_e2e == 'true'
392428
permissions:
393429
actions: read
@@ -398,9 +434,10 @@ jobs:
398434
image-tag: ${{ github.sha }}
399435
job-name: Kubernetes E2E (workspace operator mode)
400436
e2e-task: e2e:kubernetes:workspace-operator
437+
conformance-artifact-prefix: openshell-conformance
401438

402439
kubernetes-ha-e2e:
403-
needs: [pr_metadata, build-cli, build-gateway-image, build-supervisor-image]
440+
needs: [pr_metadata, build-cli, build-conformance, build-gateway-image, build-supervisor-image]
404441
if: needs.pr_metadata.outputs.should_run == 'true' && needs.pr_metadata.outputs.run_kubernetes_ha_e2e == 'true'
405442
permissions:
406443
actions: read
@@ -412,9 +449,10 @@ jobs:
412449
job-name: Kubernetes HA E2E (Rust smoke)
413450
extra-helm-values: deploy/helm/openshell/ci/values-high-availability.yaml
414451
external-postgres-secret: openshell-ha-pg
452+
conformance-artifact-prefix: openshell-conformance
415453

416454
kubernetes-credential-drivers-e2e:
417-
needs: [pr_metadata, build-cli, build-gateway-image, build-supervisor-image]
455+
needs: [pr_metadata, build-cli, build-conformance, build-gateway-image, build-supervisor-image]
418456
if: needs.pr_metadata.outputs.should_run == 'true' && needs.pr_metadata.outputs.run_kubernetes_credential_drivers_e2e == 'true'
419457
permissions:
420458
actions: read
@@ -425,6 +463,7 @@ jobs:
425463
image-tag: ${{ github.sha }}
426464
job-name: Kubernetes Credential Drivers E2E
427465
e2e-task: e2e:kubernetes:credential-drivers
466+
conformance-artifact-prefix: openshell-conformance
428467

429468
core-e2e-result:
430469
name: Core E2E result

.github/workflows/e2e-docker-test.yml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,10 @@ on:
2525
required: false
2626
type: string
2727
default: ""
28+
conformance-artifact-prefix:
29+
required: false
30+
type: string
31+
default: ""
2832
suite-matrix:
2933
required: false
3034
type: string
@@ -66,6 +70,8 @@ jobs:
6670
persist-credentials: false
6771

6872
- uses: ./.github/actions/setup-e2e-cli
73+
with:
74+
conformance-artifact-prefix: ${{ inputs.conformance-artifact-prefix }}
6975

7076
- uses: ./.github/actions/setup-e2e-gateway
7177
with:

.github/workflows/e2e-gpu-test.yaml

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,11 @@ on:
77
description: "Image tag to test (typically the commit SHA)"
88
required: true
99
type: string
10+
conformance-artifact-prefix:
11+
description: "Optional prebuilt conformance CLI artifact prefix (artifact suffix is <triple>)"
12+
required: false
13+
type: string
14+
default: ""
1015

1116
permissions:
1217
actions: read
@@ -61,6 +66,8 @@ jobs:
6166

6267
- name: Use prebuilt OpenShell CLI
6368
uses: ./.github/actions/setup-e2e-cli
69+
with:
70+
conformance-artifact-prefix: ${{ inputs.conformance-artifact-prefix }}
6471

6572
- name: Use prebuilt OpenShell gateway
6673
uses: ./.github/actions/setup-e2e-gateway

.github/workflows/e2e-kubernetes-test.yml

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,11 @@ on:
5252
required: false
5353
type: string
5454
default: ""
55+
conformance-artifact-prefix:
56+
description: "Optional prebuilt conformance CLI artifact prefix (artifact suffix is <triple>)"
57+
required: false
58+
type: string
59+
default: ""
5560
external-driver-binary:
5661
description: "Optional standalone compute driver binary used to compose a local test image"
5762
required: false
@@ -92,6 +97,8 @@ jobs:
9297

9398
- name: Use prebuilt OpenShell CLI
9499
uses: ./.github/actions/setup-e2e-cli
100+
with:
101+
conformance-artifact-prefix: ${{ inputs.conformance-artifact-prefix }}
95102

96103
- name: Use prebuilt OpenShell gateway
97104
if: inputs.gateway-artifact != ''

.github/workflows/e2e-podman-test.yml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,10 @@ on:
2121
required: false
2222
type: string
2323
default: ""
24+
conformance-artifact-prefix:
25+
required: false
26+
type: string
27+
default: ""
2428
suite-matrix:
2529
required: false
2630
type: string
@@ -53,6 +57,8 @@ jobs:
5357
persist-credentials: false
5458

5559
- uses: ./.github/actions/setup-e2e-cli
60+
with:
61+
conformance-artifact-prefix: ${{ inputs.conformance-artifact-prefix }}
5662

5763
- uses: ./.github/actions/setup-e2e-gateway
5864
with:

.github/workflows/e2e-vm-test.yml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,10 @@ on:
2222
required: false
2323
type: string
2424
default: e2e:vm
25+
conformance-artifact-prefix:
26+
required: false
27+
type: string
28+
default: ""
2529

2630
permissions:
2731
actions: read
@@ -43,6 +47,8 @@ jobs:
4347
persist-credentials: false
4448

4549
- uses: ./.github/actions/setup-e2e-cli
50+
with:
51+
conformance-artifact-prefix: ${{ inputs.conformance-artifact-prefix }}
4652

4753
- uses: ./.github/actions/setup-e2e-gateway
4854
with:

TESTING.md

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -171,7 +171,7 @@ key.
171171
Run the Docker-backed Rust CLI e2e suite:
172172

173173
```shell
174-
mise run e2e:rust
174+
mise run e2e:docker
175175
```
176176

177177
Run the minimal portable CLI conformance profile against the gateway selected
@@ -210,7 +210,9 @@ openshell sandbox list --output json
210210
openshell sandbox delete <sandbox-name>
211211
```
212212

213-
Run the Podman-backed Rust CLI e2e suite:
213+
Gateway-backed Rust E2E tasks build the standalone conformance CLI, run its
214+
registered scenarios against the configured gateway, then run any lane-specific
215+
Rust tests that still apply. Run the Podman-backed Rust CLI e2e suite:
214216

215217
```shell
216218
mise run e2e:podman

docs/index.yml

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,9 +27,6 @@ navigation:
2727
title: "Kubernetes"
2828
- folder: reference
2929
title: "Reference"
30-
contents:
31-
- page: "OpenShell conformance CLI"
32-
path: reference/conformance-cli.mdx
3330
- folder: security
3431
title: "Security"
3532
- folder: resources

0 commit comments

Comments
 (0)