Skip to content

Commit 96a795a

Browse files
committed
ci: build images from Nix artifacts
Refs #1683 Signed-off-by: Simon Scatton <[email protected]>
1 parent 8a332e2 commit 96a795a

10 files changed

Lines changed: 126 additions & 515 deletions

File tree

Lines changed: 2 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,20 @@
11
name: Setup E2E CLI
22
description: Download an architecture-matched prebuilt OpenShell CLI for E2E tests
33

4-
inputs:
5-
artifact-prefix:
6-
description: Artifact name prefix; linux-<arch> is appended automatically
7-
required: true
8-
94
runs:
105
using: composite
116
steps:
127
- name: Download prebuilt CLI
138
uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
149
with:
15-
name: ${{ format('{0}-linux-{1}', inputs.artifact-prefix, runner.arch == 'X64' && 'amd64' || 'arm64') }}
10+
name: ${{ runner.arch == 'X64' && 'openshell-x86_64-unknown-linux-musl' || 'openshell-aarch64-unknown-linux-musl' }}
1611
path: .e2e/prebuilt-cli
1712

1813
- name: Configure prebuilt CLI
1914
shell: bash
2015
run: |
21-
set -euo pipefail
16+
tar -xzf "$GITHUB_WORKSPACE"/.e2e/prebuilt-cli/*.tar.gz -C "$GITHUB_WORKSPACE/.e2e/prebuilt-cli"
2217
cli="$GITHUB_WORKSPACE/.e2e/prebuilt-cli/openshell"
23-
if [[ ! -f "$cli" ]]; then
24-
echo "downloaded artifact is missing $cli" >&2
25-
exit 1
26-
fi
2718
chmod +x "$cli"
2819
"$cli" --version
2920
echo "OPENSHELL_BIN=$cli" >> "$GITHUB_ENV"
Lines changed: 2 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,20 @@
11
name: Setup E2E Gateway
22
description: Download an architecture-matched prebuilt OpenShell gateway for E2E tests
33

4-
inputs:
5-
artifact-prefix:
6-
description: Artifact name prefix; linux-<arch> is appended automatically
7-
required: true
8-
94
runs:
105
using: composite
116
steps:
127
- name: Download prebuilt gateway
138
uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
149
with:
15-
name: ${{ format('{0}-linux-{1}', inputs.artifact-prefix, runner.arch == 'X64' && 'amd64' || 'arm64') }}
10+
name: ${{ runner.arch == 'X64' && 'openshell-gateway-x86_64-unknown-linux-gnu' || 'openshell-gateway-aarch64-unknown-linux-gnu' }}
1611
path: .e2e/prebuilt-gateway
1712

1813
- name: Configure prebuilt gateway
1914
shell: bash
2015
run: |
21-
set -euo pipefail
16+
tar -xzf "$GITHUB_WORKSPACE"/.e2e/prebuilt-gateway/*.tar.gz -C "$GITHUB_WORKSPACE/.e2e/prebuilt-gateway"
2217
gateway="$GITHUB_WORKSPACE/.e2e/prebuilt-gateway/openshell-gateway"
23-
if [[ ! -f "$gateway" ]]; then
24-
echo "downloaded artifact is missing $gateway" >&2
25-
exit 1
26-
fi
2718
chmod +x "$gateway"
2819
"$gateway" --version
2920
echo "OPENSHELL_GATEWAY_BIN=$gateway" >> "$GITHUB_ENV"
Lines changed: 4 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,38 +1,20 @@
11
name: Setup E2E VM Driver
2-
description: Download a prebuilt OpenShell VM driver for E2E tests
3-
4-
inputs:
5-
artifact-name:
6-
description: Artifact name to download, such as driver-vm-linux-amd64
7-
required: true
2+
description: Download an architecture-matched prebuilt OpenShell VM driver for E2E tests
83

94
runs:
105
using: composite
116
steps:
127
- name: Download prebuilt VM driver
138
uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
149
with:
15-
name: ${{ inputs.artifact-name }}
10+
name: ${{ runner.arch == 'X64' && 'openshell-driver-vm-x86_64-unknown-linux-gnu' || 'openshell-driver-vm-aarch64-unknown-linux-gnu' }}
1611
path: .e2e/prebuilt-vm-driver
1712

1813
- name: Configure prebuilt VM driver
1914
shell: bash
2015
run: |
21-
set -euo pipefail
22-
extract_dir="$GITHUB_WORKSPACE/.e2e/prebuilt-vm-driver/bin"
23-
mkdir -p "$extract_dir"
24-
archive="$(find "$GITHUB_WORKSPACE/.e2e/prebuilt-vm-driver" -maxdepth 1 -type f -name 'openshell-driver-vm-*.tar.gz' -print -quit)"
25-
if [[ -z "$archive" ]]; then
26-
echo "downloaded artifact is missing openshell-driver-vm-*.tar.gz" >&2
27-
find "$GITHUB_WORKSPACE/.e2e/prebuilt-vm-driver" -maxdepth 2 -type f -print >&2 || true
28-
exit 1
29-
fi
30-
tar -xzf "$archive" -C "$extract_dir"
31-
driver="$extract_dir/openshell-driver-vm"
32-
if [[ ! -f "$driver" ]]; then
33-
echo "downloaded artifact is missing $driver" >&2
34-
exit 1
35-
fi
16+
tar -xzf "$GITHUB_WORKSPACE"/.e2e/prebuilt-vm-driver/*.tar.gz -C "$GITHUB_WORKSPACE/.e2e/prebuilt-vm-driver"
17+
driver="$GITHUB_WORKSPACE/.e2e/prebuilt-vm-driver/openshell-driver-vm"
3618
chmod +x "$driver"
3719
"$driver" --version
3820
echo "OPENSHELL_VM_DRIVER_BIN=$driver" >> "$GITHUB_ENV"

‎.github/workflows/branch-e2e.yml‎

Lines changed: 35 additions & 95 deletions
Original file line numberDiff line numberDiff line change
@@ -76,55 +76,25 @@ jobs:
7676
echo "run_any_e2e=$run_any_e2e"
7777
} >> "$GITHUB_OUTPUT"
7878
79-
build-gateway:
79+
build-binaries:
8080
needs: [pr_metadata]
8181
if: needs.pr_metadata.outputs.should_run == 'true' && needs.pr_metadata.outputs.run_any_e2e == 'true'
8282
permissions:
8383
contents: read
84-
packages: write
85-
uses: ./.github/workflows/docker-build.yml
86-
with:
87-
component: gateway
88-
image-tag: ${{ github.sha }}
89-
90-
build-supervisor:
91-
needs: [pr_metadata]
92-
if: needs.pr_metadata.outputs.should_run == 'true' && needs.pr_metadata.outputs.run_any_e2e == 'true'
93-
permissions:
94-
contents: read
95-
packages: write
96-
uses: ./.github/workflows/docker-build.yml
97-
with:
98-
component: supervisor
99-
image-tag: ${{ github.sha }}
84+
uses: ./.github/workflows/build-binaries.yml
85+
secrets: inherit
10086

101-
build-cli:
102-
needs: [pr_metadata]
87+
build-images:
88+
needs: [pr_metadata, build-binaries]
10389
if: needs.pr_metadata.outputs.should_run == 'true' && needs.pr_metadata.outputs.run_any_e2e == 'true'
10490
permissions:
10591
contents: read
10692
packages: write
10793
uses: ./.github/workflows/docker-build.yml
108-
with:
109-
component: cli
110-
platform: linux/amd64,linux/arm64
111-
112-
build-driver-vm-linux:
113-
needs: [pr_metadata]
114-
if: needs.pr_metadata.outputs.should_run == 'true' && needs.pr_metadata.outputs.run_core_e2e == 'true'
115-
permissions:
116-
contents: read
117-
packages: read
118-
uses: ./.github/workflows/driver-vm-linux.yml
119-
with:
120-
image-tag: ${{ github.sha }}
121-
checkout-ref: ${{ github.sha }}
122-
runtime-platforms: linux-x86_64
123-
driver-targets: >-
124-
[{"arch":"amd64","runner":"linux-amd64-cpu8","target":"x86_64-unknown-linux-gnu","zig_target":"x86_64-unknown-linux-gnu.2.28","platform":"linux-x86_64","guest_arch":"x86_64"}]
94+
secrets: inherit
12595

12696
e2e:
127-
needs: [pr_metadata, build-gateway, build-supervisor, build-cli, build-driver-vm-linux]
97+
needs: [pr_metadata, build-binaries, build-images]
12898
if: needs.pr_metadata.outputs.should_run == 'true' && needs.pr_metadata.outputs.run_core_e2e == 'true'
12999
permissions:
130100
actions: read
@@ -134,12 +104,9 @@ jobs:
134104
with:
135105
image-tag: ${{ github.sha }}
136106
runner: linux-arm64-cpu8
137-
cli-artifact-prefix: rust-binary-cli
138-
gateway-artifact-prefix: rust-binary-gateway
139-
vm-driver-artifact-name: driver-vm-linux-amd64
140107

141108
gpu-e2e:
142-
needs: [pr_metadata, build-gateway, build-supervisor, build-cli]
109+
needs: [pr_metadata, build-binaries, build-images]
143110
if: needs.pr_metadata.outputs.should_run == 'true' && needs.pr_metadata.outputs.run_gpu_e2e == 'true'
144111
permissions:
145112
actions: read
@@ -148,11 +115,9 @@ jobs:
148115
uses: ./.github/workflows/e2e-gpu-test.yaml
149116
with:
150117
image-tag: ${{ github.sha }}
151-
cli-artifact-prefix: rust-binary-cli
152-
gateway-artifact-prefix: rust-binary-gateway
153118

154119
kubernetes-e2e:
155-
needs: [pr_metadata, build-gateway, build-supervisor, build-cli]
120+
needs: [pr_metadata, build-binaries, build-images]
156121
if: needs.pr_metadata.outputs.should_run == 'true' && needs.pr_metadata.outputs.run_core_e2e == 'true'
157122
strategy:
158123
fail-fast: false
@@ -180,10 +145,9 @@ jobs:
180145
job-name: Kubernetes E2E (Rust smoke, ${{ matrix.topology }}, Agent Sandbox ${{ matrix.agent_sandbox_api }})
181146
agent-sandbox-version: ${{ matrix.agent_sandbox_version }}
182147
extra-helm-values: ${{ matrix.extra_helm_values }}
183-
cli-artifact-prefix: rust-binary-cli
184148

185149
kubernetes-workspace-managed-e2e:
186-
needs: [pr_metadata, build-gateway, build-supervisor, build-cli]
150+
needs: [pr_metadata, build-binaries, build-images]
187151
if: needs.pr_metadata.outputs.should_run == 'true' && needs.pr_metadata.outputs.run_core_e2e == 'true'
188152
permissions:
189153
actions: read
@@ -194,24 +158,12 @@ jobs:
194158
image-tag: ${{ github.sha }}
195159
job-name: Kubernetes E2E (workspace managed mode)
196160
e2e-task: e2e:kubernetes:workspace-managed
197-
cli-artifact-prefix: rust-binary-cli
198161

199-
kubernetes-external-driver-e2e:
200-
needs: [pr_metadata, build-gateway, build-supervisor, build-cli]
201-
if: needs.pr_metadata.outputs.should_run == 'true' && needs.pr_metadata.outputs.run_core_e2e == 'true'
202-
permissions:
203-
actions: read
204-
contents: read
205-
packages: read
206-
uses: ./.github/workflows/e2e-kubernetes-test.yml
207-
with:
208-
image-tag: ${{ github.sha }}
209-
job-name: Kubernetes E2E (external compute driver)
210-
e2e-task: e2e:kubernetes:external-driver
211-
cli-artifact-prefix: rust-binary-cli
162+
# External Kubernetes driver E2E stays disabled while its standalone binary
163+
# is not a release artifact.
212164

213165
kubernetes-workspace-operator-e2e:
214-
needs: [pr_metadata, build-gateway, build-supervisor, build-cli]
166+
needs: [pr_metadata, build-binaries, build-images]
215167
if: needs.pr_metadata.outputs.should_run == 'true' && needs.pr_metadata.outputs.run_core_e2e == 'true'
216168
permissions:
217169
actions: read
@@ -222,10 +174,9 @@ jobs:
222174
image-tag: ${{ github.sha }}
223175
job-name: Kubernetes E2E (workspace operator mode)
224176
e2e-task: e2e:kubernetes:workspace-operator
225-
cli-artifact-prefix: rust-binary-cli
226177

227178
kubernetes-ha-e2e:
228-
needs: [pr_metadata, build-gateway, build-supervisor, build-cli]
179+
needs: [pr_metadata, build-binaries, build-images]
229180
if: needs.pr_metadata.outputs.should_run == 'true' && needs.pr_metadata.outputs.run_kubernetes_ha_e2e == 'true'
230181
permissions:
231182
actions: read
@@ -237,10 +188,9 @@ jobs:
237188
job-name: Kubernetes HA E2E (Rust smoke)
238189
extra-helm-values: deploy/helm/openshell/ci/values-high-availability.yaml
239190
external-postgres-secret: openshell-ha-pg
240-
cli-artifact-prefix: rust-binary-cli
241191

242192
kubernetes-credential-drivers-e2e:
243-
needs: [pr_metadata, build-gateway, build-supervisor]
193+
needs: [pr_metadata, build-binaries, build-images]
244194
if: needs.pr_metadata.outputs.should_run == 'true' && needs.pr_metadata.outputs.run_kubernetes_credential_drivers_e2e == 'true'
245195
permissions:
246196
actions: read
@@ -254,32 +204,26 @@ jobs:
254204

255205
core-e2e-result:
256206
name: Core E2E result
257-
needs: [pr_metadata, build-gateway, build-supervisor, build-cli, build-driver-vm-linux, e2e, kubernetes-e2e, kubernetes-external-driver-e2e, kubernetes-workspace-managed-e2e, kubernetes-workspace-operator-e2e]
207+
needs: [pr_metadata, build-binaries, build-images, e2e, kubernetes-e2e, kubernetes-workspace-managed-e2e, kubernetes-workspace-operator-e2e]
258208
if: always() && needs.pr_metadata.outputs.should_run == 'true' && needs.pr_metadata.outputs.run_core_e2e == 'true'
259209
runs-on: ubuntu-latest
260210
steps:
261211
- name: Verify core E2E jobs
262212
env:
263-
BUILD_GATEWAY_RESULT: ${{ needs.build-gateway.result }}
264-
BUILD_SUPERVISOR_RESULT: ${{ needs.build-supervisor.result }}
265-
BUILD_CLI_RESULT: ${{ needs.build-cli.result }}
266-
BUILD_DRIVER_VM_RESULT: ${{ needs.build-driver-vm-linux.result }}
213+
BUILD_BINARIES_RESULT: ${{ needs.build-binaries.result }}
214+
BUILD_IMAGES_RESULT: ${{ needs.build-images.result }}
267215
E2E_RESULT: ${{ needs.e2e.result }}
268216
KUBERNETES_E2E_RESULT: ${{ needs.kubernetes-e2e.result }}
269-
KUBERNETES_EXTERNAL_DRIVER_E2E_RESULT: ${{ needs.kubernetes-external-driver-e2e.result }}
270217
KUBERNETES_WORKSPACE_MANAGED_E2E_RESULT: ${{ needs.kubernetes-workspace-managed-e2e.result }}
271218
KUBERNETES_WORKSPACE_OPERATOR_E2E_RESULT: ${{ needs.kubernetes-workspace-operator-e2e.result }}
272219
run: |
273220
set -euo pipefail
274221
failed=0
275222
for item in \
276-
"build-gateway:$BUILD_GATEWAY_RESULT" \
277-
"build-supervisor:$BUILD_SUPERVISOR_RESULT" \
278-
"build-cli:$BUILD_CLI_RESULT" \
279-
"build-driver-vm-linux:$BUILD_DRIVER_VM_RESULT" \
223+
"build-binaries:$BUILD_BINARIES_RESULT" \
224+
"build-images:$BUILD_IMAGES_RESULT" \
280225
"e2e:$E2E_RESULT" \
281226
"kubernetes-e2e:$KUBERNETES_E2E_RESULT" \
282-
"kubernetes-external-driver-e2e:$KUBERNETES_EXTERNAL_DRIVER_E2E_RESULT" \
283227
"kubernetes-workspace-managed-e2e:$KUBERNETES_WORKSPACE_MANAGED_E2E_RESULT" \
284228
"kubernetes-workspace-operator-e2e:$KUBERNETES_WORKSPACE_OPERATOR_E2E_RESULT"; do
285229
name="${item%%:*}"
@@ -293,23 +237,21 @@ jobs:
293237
294238
gpu-e2e-result:
295239
name: GPU E2E result
296-
needs: [pr_metadata, build-gateway, build-supervisor, build-cli, gpu-e2e]
240+
needs: [pr_metadata, build-binaries, build-images, gpu-e2e]
297241
if: always() && needs.pr_metadata.outputs.should_run == 'true' && needs.pr_metadata.outputs.run_gpu_e2e == 'true'
298242
runs-on: ubuntu-latest
299243
steps:
300244
- name: Verify GPU E2E jobs
301245
env:
302-
BUILD_GATEWAY_RESULT: ${{ needs.build-gateway.result }}
303-
BUILD_SUPERVISOR_RESULT: ${{ needs.build-supervisor.result }}
304-
BUILD_CLI_RESULT: ${{ needs.build-cli.result }}
246+
BUILD_BINARIES_RESULT: ${{ needs.build-binaries.result }}
247+
BUILD_IMAGES_RESULT: ${{ needs.build-images.result }}
305248
GPU_E2E_RESULT: ${{ needs.gpu-e2e.result }}
306249
run: |
307250
set -euo pipefail
308251
failed=0
309252
for item in \
310-
"build-gateway:$BUILD_GATEWAY_RESULT" \
311-
"build-supervisor:$BUILD_SUPERVISOR_RESULT" \
312-
"build-cli:$BUILD_CLI_RESULT" \
253+
"build-binaries:$BUILD_BINARIES_RESULT" \
254+
"build-images:$BUILD_IMAGES_RESULT" \
313255
"gpu-e2e:$GPU_E2E_RESULT"; do
314256
name="${item%%:*}"
315257
result="${item#*:}"
@@ -322,23 +264,21 @@ jobs:
322264
323265
kubernetes-ha-e2e-result:
324266
name: Kubernetes HA E2E result
325-
needs: [pr_metadata, build-gateway, build-supervisor, build-cli, kubernetes-ha-e2e]
267+
needs: [pr_metadata, build-binaries, build-images, kubernetes-ha-e2e]
326268
if: always() && needs.pr_metadata.outputs.should_run == 'true' && needs.pr_metadata.outputs.run_kubernetes_ha_e2e == 'true'
327269
runs-on: ubuntu-latest
328270
steps:
329271
- name: Verify Kubernetes HA E2E jobs
330272
env:
331-
BUILD_GATEWAY_RESULT: ${{ needs.build-gateway.result }}
332-
BUILD_SUPERVISOR_RESULT: ${{ needs.build-supervisor.result }}
333-
BUILD_CLI_RESULT: ${{ needs.build-cli.result }}
273+
BUILD_BINARIES_RESULT: ${{ needs.build-binaries.result }}
274+
BUILD_IMAGES_RESULT: ${{ needs.build-images.result }}
334275
KUBERNETES_HA_E2E_RESULT: ${{ needs.kubernetes-ha-e2e.result }}
335276
run: |
336277
set -euo pipefail
337278
failed=0
338279
for item in \
339-
"build-gateway:$BUILD_GATEWAY_RESULT" \
340-
"build-supervisor:$BUILD_SUPERVISOR_RESULT" \
341-
"build-cli:$BUILD_CLI_RESULT" \
280+
"build-binaries:$BUILD_BINARIES_RESULT" \
281+
"build-images:$BUILD_IMAGES_RESULT" \
342282
"kubernetes-ha-e2e:$KUBERNETES_HA_E2E_RESULT"; do
343283
name="${item%%:*}"
344284
result="${item#*:}"
@@ -351,21 +291,21 @@ jobs:
351291
352292
kubernetes-credential-drivers-e2e-result:
353293
name: Kubernetes Credential Drivers E2E result
354-
needs: [pr_metadata, build-gateway, build-supervisor, kubernetes-credential-drivers-e2e]
294+
needs: [pr_metadata, build-binaries, build-images, kubernetes-credential-drivers-e2e]
355295
if: always() && needs.pr_metadata.outputs.should_run == 'true' && needs.pr_metadata.outputs.run_kubernetes_credential_drivers_e2e == 'true'
356296
runs-on: ubuntu-latest
357297
steps:
358298
- name: Verify Kubernetes credential drivers E2E jobs
359299
env:
360-
BUILD_GATEWAY_RESULT: ${{ needs.build-gateway.result }}
361-
BUILD_SUPERVISOR_RESULT: ${{ needs.build-supervisor.result }}
300+
BUILD_BINARIES_RESULT: ${{ needs.build-binaries.result }}
301+
BUILD_IMAGES_RESULT: ${{ needs.build-images.result }}
362302
KUBERNETES_CREDENTIAL_DRIVERS_E2E_RESULT: ${{ needs.kubernetes-credential-drivers-e2e.result }}
363303
run: |
364304
set -euo pipefail
365305
failed=0
366306
for item in \
367-
"build-gateway:$BUILD_GATEWAY_RESULT" \
368-
"build-supervisor:$BUILD_SUPERVISOR_RESULT" \
307+
"build-binaries:$BUILD_BINARIES_RESULT" \
308+
"build-images:$BUILD_IMAGES_RESULT" \
369309
"kubernetes-credential-drivers-e2e:$KUBERNETES_CREDENTIAL_DRIVERS_E2E_RESULT"; do
370310
name="${item%%:*}"
371311
result="${item#*:}"

0 commit comments

Comments
 (0)