@@ -101,11 +101,21 @@ jobs:
101101 echo "rpm_release=$rpm_release"
102102 } >> "$GITHUB_OUTPUT"
103103
104- build-binaries :
104+ build-binaries-linux :
105105 needs : version
106106 permissions :
107107 contents : read
108- uses : ./.github/workflows/build-binaries.yml
108+ uses : ./.github/workflows/build-binaries-linux.yml
109+ with :
110+ cargo-version : ${{ needs.version.outputs.cargo }}
111+ secrets :
112+ CACHIX_AUTH_TOKEN : ${{ secrets.CACHIX_AUTH_TOKEN }}
113+
114+ build-binaries-macos :
115+ needs : version
116+ permissions :
117+ contents : read
118+ uses : ./.github/workflows/build-binaries-macos.yml
109119 with :
110120 cargo-version : ${{ needs.version.outputs.cargo }}
111121 secrets :
@@ -146,7 +156,7 @@ jobs:
146156
147157 # The conformance program, built once per architecture for the host lanes.
148158 # It lives in its own workspace and is not released, so it is not part of
149- # build-binaries.yml.
159+ # build-binaries-linux .yml.
150160 build-conformance :
151161 name : openshell-conformance (${{ matrix.triple }})
152162 needs : [pr_metadata]
@@ -237,19 +247,30 @@ jobs:
237247 triple : ${{ matrix.triple }}
238248 cargo-version : ${{ needs.version.outputs.cargo }}
239249
240- build-vm-driver :
241- needs : [pr_metadata, version, build-binaries]
250+ build-vm-driver-linux :
251+ needs : [pr_metadata, version, build-binaries-linux ]
242252 if : needs.pr_metadata.outputs.run_core_e2e == 'true'
243253 permissions :
244254 contents : read
245- uses : ./.github/workflows/build-vm-driver.yml
255+ uses : ./.github/workflows/build-vm-driver-linux.yml
256+ with :
257+ cargo-version : ${{ needs.version.outputs.cargo }}
258+ secrets :
259+ CACHIX_AUTH_TOKEN : ${{ secrets.CACHIX_AUTH_TOKEN }}
260+
261+ build-vm-driver-macos :
262+ needs : [pr_metadata, version, build-binaries-linux, build-binaries-macos]
263+ if : needs.pr_metadata.outputs.run_core_e2e == 'true'
264+ permissions :
265+ contents : read
266+ uses : ./.github/workflows/build-vm-driver-macos.yml
246267 with :
247268 cargo-version : ${{ needs.version.outputs.cargo }}
248269 secrets :
249270 CACHIX_AUTH_TOKEN : ${{ secrets.CACHIX_AUTH_TOKEN }}
250271
251272 build-images :
252- needs : [pr_metadata, build-binaries]
273+ needs : [pr_metadata, build-binaries-linux ]
253274 if : needs.pr_metadata.outputs.should_run == 'true' && needs.pr_metadata.outputs.run_any_e2e == 'true'
254275 permissions :
255276 contents : read
@@ -258,7 +279,7 @@ jobs:
258279
259280 build-deb :
260281 name : Build Debian packages
261- needs : [pr_metadata, version, build-binaries, build-vm-driver]
282+ needs : [pr_metadata, version, build-binaries-linux , build-vm-driver-linux ]
262283 if : needs.pr_metadata.outputs.run_integration == 'true'
263284 permissions :
264285 contents : read
@@ -270,7 +291,7 @@ jobs:
270291
271292 build-rpm :
272293 name : Build RPM packages
273- needs : [pr_metadata, version, build-binaries]
294+ needs : [pr_metadata, version, build-binaries-linux ]
274295 if : needs.pr_metadata.outputs.run_integration == 'true'
275296 permissions :
276297 actions : read
@@ -282,8 +303,48 @@ jobs:
282303 rpm-release : ${{ needs.version.outputs.rpm_release }}
283304 cargo-version : ${{ needs.version.outputs.cargo }}
284305
306+ # Test inputs don't depend on the packages, so build them while the packages
307+ # build instead of in prepare-integration.
308+ build-tmachine-test-inputs :
309+ name : Build tmachine test inputs
310+ needs : [pr_metadata]
311+ if : needs.pr_metadata.outputs.run_integration == 'true'
312+ permissions :
313+ contents : read
314+ runs-on : ubuntu-24.04
315+ timeout-minutes : 30
316+ steps :
317+ - uses : actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
318+ with :
319+ persist-credentials : false
320+ ref : ${{ github.sha }}
321+ - uses : ./.github/actions/setup-nix
322+ - name : Build test archives
323+ run : |
324+ # Retry dependency preparation, then generate artifacts once.
325+ nix build --no-link .#build-artifacts-test-archives || nix build --no-link .#build-artifacts-test-archives
326+ nix run .#build-artifacts-test-archives
327+ - name : Build test workload images
328+ run : |
329+ # Retry dependency preparation, then generate artifacts once.
330+ nix build --no-link .#build-artifacts-test-images || nix build --no-link .#build-artifacts-test-images
331+ nix run .#build-artifacts-test-images
332+ - name : Package Helm chart
333+ run : |
334+ # Retry dependency preparation, then generate artifacts once.
335+ nix build --no-link .#build-artifacts-helm || nix build --no-link .#build-artifacts-helm
336+ nix run .#build-artifacts-helm
337+ - name : Upload tmachine test inputs
338+ uses : actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
339+ with :
340+ name : openshell-tmachine-test-inputs
341+ path : artifacts
342+ compression-level : 0
343+ retention-days : 5
344+ if-no-files-found : error
345+
285346 prepare-integration :
286- needs : [pr_metadata, build-binaries, build-images, build-deb, build-rpm]
347+ needs : [pr_metadata, build-binaries-linux , build-images, build-deb, build-rpm, build-tmachine-test-inputs ]
287348 if : needs.pr_metadata.outputs.run_integration == 'true'
288349 permissions :
289350 actions : read
@@ -293,6 +354,7 @@ jobs:
293354 with :
294355 deb-artifact-name : deb-linux-amd64
295356 rpm-artifact-name : rpm-linux-x86_64
357+ test-inputs-artifact-name : openshell-tmachine-test-inputs
296358
297359 # Run driver-independent conformance tests.
298360 conformance-integration :
@@ -361,7 +423,7 @@ jobs:
361423 ]
362424
363425 docker-e2e :
364- needs : [pr_metadata, build-binaries, build-conformance, build-images]
426+ needs : [pr_metadata, build-binaries-linux , build-conformance, build-images]
365427 if : needs.pr_metadata.outputs.should_run == 'true' && needs.pr_metadata.outputs.run_core_e2e == 'true'
366428 permissions :
367429 actions : read
@@ -374,7 +436,7 @@ jobs:
374436 runner : linux-arm64-cpu8
375437
376438 podman-e2e :
377- needs : [pr_metadata, build-binaries, build-conformance, build-images]
439+ needs : [pr_metadata, build-binaries-linux , build-conformance, build-images]
378440 if : needs.pr_metadata.outputs.should_run == 'true' && needs.pr_metadata.outputs.run_core_e2e == 'true'
379441 permissions :
380442 actions : read
@@ -388,7 +450,7 @@ jobs:
388450 [{"suite":"ci","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:ci"}]
389451
390452 podman-additional-ca-e2e :
391- needs : [pr_metadata, build-binaries, build-conformance, build-images]
453+ needs : [pr_metadata, build-binaries-linux , build-conformance, build-images]
392454 if : needs.pr_metadata.outputs.should_run == 'true' && needs.pr_metadata.outputs.run_core_e2e == 'true'
393455 permissions :
394456 actions : read
@@ -402,7 +464,7 @@ jobs:
402464 [{"suite":"additional-ca","runner":"ubuntu-26.04","podman_major":"5","podman_package_version":"5.7.0+ds2-3build1","conmon_package_version":"2.1.13+ds1-2","cmd":"OPENSHELL_E2E_PODMAN_TEST=additional_ca mise run --no-deps --skip-deps e2e:podman"}]
403465
404466 vm-e2e :
405- needs : [pr_metadata, build-binaries, build-conformance, build-vm-driver]
467+ needs : [pr_metadata, build-binaries-linux , build-conformance, build-vm-driver-linux ]
406468 if : needs.pr_metadata.outputs.should_run == 'true' && needs.pr_metadata.outputs.run_core_e2e == 'true'
407469 permissions :
408470 actions : read
@@ -413,7 +475,7 @@ jobs:
413475 prebuilt-conformance : true
414476
415477 vm-additional-ca-e2e :
416- needs : [pr_metadata, build-binaries, build-conformance, build-vm-driver]
478+ needs : [pr_metadata, build-binaries-linux , build-conformance, build-vm-driver-linux ]
417479 if : needs.pr_metadata.outputs.should_run == 'true' && needs.pr_metadata.outputs.run_core_e2e == 'true'
418480 permissions :
419481 actions : read
@@ -426,7 +488,7 @@ jobs:
426488 test-name : additional_ca
427489
428490 docker-external-driver-e2e :
429- needs : [pr_metadata, build-binaries, build-conformance, build-gateway-plain, build-external-drivers, build-images]
491+ needs : [pr_metadata, build-binaries-linux , build-conformance, build-gateway-plain, build-external-drivers, build-images]
430492 if : needs.pr_metadata.outputs.should_run == 'true' && needs.pr_metadata.outputs.run_core_e2e == 'true'
431493 permissions :
432494 actions : read
@@ -443,7 +505,7 @@ jobs:
443505 [{"suite":"external-driver","cmd":"mise run --no-deps --skip-deps e2e:docker:external-driver","apt_packages":"openssh-client","python_proto":false,"mcp":false}]
444506
445507 podman-external-driver-e2e :
446- needs : [pr_metadata, build-binaries, build-conformance, build-gateway-plain, build-external-drivers, build-images]
508+ needs : [pr_metadata, build-binaries-linux , build-conformance, build-gateway-plain, build-external-drivers, build-images]
447509 if : needs.pr_metadata.outputs.should_run == 'true' && needs.pr_metadata.outputs.run_core_e2e == 'true'
448510 permissions :
449511 actions : read
@@ -459,7 +521,7 @@ jobs:
459521 [{"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"}]
460522
461523 vm-external-driver-e2e :
462- needs : [pr_metadata, build-binaries, build-conformance, build-gateway-plain, build-vm-driver]
524+ needs : [pr_metadata, build-binaries-linux , build-conformance, build-gateway-plain, build-vm-driver-linux ]
463525 if : needs.pr_metadata.outputs.should_run == 'true' && needs.pr_metadata.outputs.run_core_e2e == 'true'
464526 permissions :
465527 actions : read
@@ -473,7 +535,7 @@ jobs:
473535 e2e-task : e2e:vm:external-driver
474536
475537 gpu-e2e :
476- needs : [pr_metadata, build-binaries, build-images]
538+ needs : [pr_metadata, build-binaries-linux , build-images]
477539 if : needs.pr_metadata.outputs.should_run == 'true' && needs.pr_metadata.outputs.run_gpu_e2e == 'true'
478540 permissions :
479541 actions : read
@@ -484,7 +546,7 @@ jobs:
484546 image-tag : ${{ github.sha }}
485547
486548 kubernetes-e2e :
487- needs : [pr_metadata, build-binaries, build-conformance, build-images]
549+ needs : [pr_metadata, build-binaries-linux , build-conformance, build-images]
488550 if : needs.pr_metadata.outputs.should_run == 'true' && needs.pr_metadata.outputs.run_core_e2e == 'true'
489551 strategy :
490552 fail-fast : false
@@ -515,7 +577,7 @@ jobs:
515577 test-name : ${{ matrix.test_name }}
516578
517579 kubernetes-app-listener-e2e :
518- needs : [pr_metadata, build-binaries, build-conformance, build-images]
580+ needs : [pr_metadata, build-binaries-linux , build-conformance, build-images]
519581 if : needs.pr_metadata.outputs.should_run == 'true' && needs.pr_metadata.outputs.run_core_e2e == 'true'
520582 strategy :
521583 fail-fast : false
@@ -553,7 +615,7 @@ jobs:
553615 listener-takeover : ${{ matrix.takeover }}
554616
555617 kubernetes-workspace-managed-e2e :
556- needs : [pr_metadata, build-binaries, build-conformance, build-images]
618+ needs : [pr_metadata, build-binaries-linux , build-conformance, build-images]
557619 if : needs.pr_metadata.outputs.should_run == 'true' && needs.pr_metadata.outputs.run_core_e2e == 'true'
558620 permissions :
559621 actions : read
@@ -567,7 +629,7 @@ jobs:
567629 e2e-task : e2e:kubernetes:workspace-managed
568630
569631 kubernetes-external-driver-e2e :
570- needs : [pr_metadata, build-binaries, build-conformance, build-gateway-plain, build-external-drivers, build-images]
632+ needs : [pr_metadata, build-binaries-linux , build-conformance, build-gateway-plain, build-external-drivers, build-images]
571633 if : needs.pr_metadata.outputs.should_run == 'true' && needs.pr_metadata.outputs.run_core_e2e == 'true'
572634 permissions :
573635 actions : read
@@ -584,7 +646,7 @@ jobs:
584646 cluster-images : sandbox supervisor
585647
586648 kubernetes-workspace-operator-e2e :
587- needs : [pr_metadata, build-binaries, build-conformance, build-images]
649+ needs : [pr_metadata, build-binaries-linux , build-conformance, build-images]
588650 if : needs.pr_metadata.outputs.should_run == 'true' && needs.pr_metadata.outputs.run_core_e2e == 'true'
589651 permissions :
590652 actions : read
@@ -598,7 +660,7 @@ jobs:
598660 e2e-task : e2e:kubernetes:workspace-operator
599661
600662 kubernetes-ha-e2e :
601- needs : [pr_metadata, build-binaries, build-conformance, build-images]
663+ needs : [pr_metadata, build-binaries-linux , build-conformance, build-images]
602664 if : needs.pr_metadata.outputs.should_run == 'true' && needs.pr_metadata.outputs.run_kubernetes_ha_e2e == 'true'
603665 permissions :
604666 actions : read
@@ -616,7 +678,7 @@ jobs:
616678 use-envoy-gateway : true
617679
618680 kubernetes-credential-drivers-e2e :
619- needs : [pr_metadata, build-binaries, build-conformance, build-images]
681+ needs : [pr_metadata, build-binaries-linux , build-conformance, build-images]
620682 if : needs.pr_metadata.outputs.should_run == 'true' && needs.pr_metadata.outputs.run_kubernetes_credential_drivers_e2e == 'true'
621683 permissions :
622684 actions : read
@@ -633,6 +695,8 @@ jobs:
633695 name : Core E2E result
634696 needs :
635697 - pr_metadata
698+ - build-binaries-macos
699+ - build-vm-driver-macos
636700 - conformance-integration
637701 - feature-specific-integration
638702 - driver-specific-integration
@@ -662,7 +726,7 @@ jobs:
662726
663727 gpu-e2e-result :
664728 name : GPU E2E result
665- needs : [pr_metadata, gpu-e2e]
729+ needs : [pr_metadata, build-binaries-macos, gpu-e2e]
666730 if : always() && needs.pr_metadata.outputs.should_run == 'true' && needs.pr_metadata.outputs.run_gpu_e2e == 'true'
667731 runs-on : ubuntu-latest
668732 steps :
@@ -675,7 +739,7 @@ jobs:
675739
676740 kubernetes-ha-e2e-result :
677741 name : Kubernetes HA E2E result
678- needs : [pr_metadata, kubernetes-ha-e2e]
742+ needs : [pr_metadata, build-binaries-macos, kubernetes-ha-e2e]
679743 if : always() && needs.pr_metadata.outputs.should_run == 'true' && needs.pr_metadata.outputs.run_kubernetes_ha_e2e == 'true'
680744 runs-on : ubuntu-latest
681745 steps :
@@ -688,7 +752,7 @@ jobs:
688752
689753 kubernetes-credential-drivers-e2e-result :
690754 name : Kubernetes Credential Drivers E2E result
691- needs : [pr_metadata, kubernetes-credential-drivers-e2e]
755+ needs : [pr_metadata, build-binaries-macos, kubernetes-credential-drivers-e2e]
692756 if : always() && needs.pr_metadata.outputs.should_run == 'true' && needs.pr_metadata.outputs.run_kubernetes_credential_drivers_e2e == 'true'
693757 runs-on : ubuntu-latest
694758 steps :
0 commit comments