Branch E2E Checks #4263
Workflow file for this run
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Branch E2E Checks | |
| on: | |
| merge_group: | |
| types: [checks_requested] | |
| push: | |
| branches: | |
| - "pull-request/[0-9]+" | |
| workflow_dispatch: {} | |
| permissions: {} | |
| concurrency: | |
| group: ${{ github.workflow }}-${{ github.ref }} | |
| cancel-in-progress: true | |
| jobs: | |
| pr_metadata: | |
| name: Resolve PR metadata | |
| runs-on: ubuntu-latest | |
| permissions: | |
| contents: read | |
| pull-requests: read | |
| outputs: | |
| should_run: ${{ steps.gate.outputs.should_run }} | |
| run_core_e2e: ${{ steps.labels.outputs.run_core_e2e }} | |
| run_gpu_e2e: ${{ steps.labels.outputs.run_gpu_e2e }} | |
| run_kubernetes_ha_e2e: ${{ steps.labels.outputs.run_kubernetes_ha_e2e }} | |
| run_kubernetes_credential_drivers_e2e: ${{ steps.labels.outputs.run_kubernetes_credential_drivers_e2e }} | |
| run_any_e2e: ${{ steps.labels.outputs.run_any_e2e }} | |
| steps: | |
| - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 | |
| - id: gate | |
| uses: ./.github/actions/pr-gate | |
| - id: labels | |
| if: steps.gate.outputs.should_run == 'true' | |
| env: | |
| EVENT_NAME: ${{ github.event_name }} | |
| LABELS_JSON: ${{ steps.gate.outputs.labels_json }} | |
| shell: bash | |
| run: | | |
| set -euo pipefail | |
| case "$EVENT_NAME" in | |
| push) | |
| run_core_e2e="$(jq -r 'index("test:e2e") != null' <<< "$LABELS_JSON")" | |
| run_gpu_e2e="$(jq -r 'index("test:e2e-gpu") != null' <<< "$LABELS_JSON")" | |
| run_kubernetes_ha_e2e=false | |
| run_kubernetes_credential_drivers_e2e=false | |
| ;; | |
| merge_group) | |
| # Merge groups have no PR labels. When GPU E2E is required as documented | |
| # in CI.md, skipping it leaves the gate pending until the queue times out | |
| # and ejects the PR. HA stays off until stable. | |
| run_core_e2e=true | |
| run_gpu_e2e=true | |
| run_kubernetes_ha_e2e=false | |
| run_kubernetes_credential_drivers_e2e=false | |
| ;; | |
| *) | |
| run_core_e2e=true | |
| run_gpu_e2e=true | |
| run_kubernetes_ha_e2e=false | |
| run_kubernetes_credential_drivers_e2e=false | |
| ;; | |
| esac | |
| if [ "$run_core_e2e" = "true" ] || [ "$run_gpu_e2e" = "true" ] || [ "$run_kubernetes_ha_e2e" = "true" ] || [ "$run_kubernetes_credential_drivers_e2e" = "true" ]; then | |
| run_any_e2e=true | |
| else | |
| run_any_e2e=false | |
| fi | |
| { | |
| echo "run_core_e2e=$run_core_e2e" | |
| echo "run_gpu_e2e=$run_gpu_e2e" | |
| echo "run_kubernetes_ha_e2e=$run_kubernetes_ha_e2e" | |
| echo "run_kubernetes_credential_drivers_e2e=$run_kubernetes_credential_drivers_e2e" | |
| echo "run_any_e2e=$run_any_e2e" | |
| } >> "$GITHUB_OUTPUT" | |
| version: | |
| needs: [pr_metadata] | |
| if: needs.pr_metadata.outputs.should_run == 'true' && needs.pr_metadata.outputs.run_any_e2e == 'true' | |
| permissions: | |
| contents: read | |
| runs-on: ubuntu-latest | |
| timeout-minutes: 5 | |
| outputs: | |
| cargo: ${{ steps.version.outputs.cargo }} | |
| steps: | |
| - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 | |
| with: | |
| fetch-depth: 0 | |
| - name: Compute version | |
| id: version | |
| run: | | |
| cargo="$(python3 tasks/scripts/release.py get-version --cargo)" | |
| echo "cargo=$cargo" >> "$GITHUB_OUTPUT" | |
| build-cli: | |
| needs: version | |
| permissions: | |
| contents: read | |
| uses: ./.github/workflows/build-cli-binaries.yml | |
| with: | |
| cargo-version: ${{ needs.version.outputs.cargo }} | |
| secrets: inherit | |
| build-sandbox: | |
| needs: version | |
| permissions: | |
| contents: read | |
| uses: ./.github/workflows/build-sandbox-binaries.yml | |
| with: | |
| cargo-version: ${{ needs.version.outputs.cargo }} | |
| secrets: inherit | |
| build-gateway: | |
| needs: version | |
| permissions: | |
| contents: read | |
| uses: ./.github/workflows/build-gateway-binaries.yml | |
| with: | |
| cargo-version: ${{ needs.version.outputs.cargo }} | |
| secrets: inherit | |
| build-gateway-plain: | |
| needs: [pr_metadata, version] | |
| if: needs.pr_metadata.outputs.run_core_e2e == 'true' | |
| permissions: | |
| contents: read | |
| strategy: | |
| matrix: | |
| include: | |
| - triple: x86_64-unknown-linux-gnu | |
| runner: linux-amd64-cpu8 | |
| dev_shell: .#devShells.x86_64-linux.glibc-2-28 | |
| interpreter: /lib64/ld-linux-x86-64.so.2 | |
| - triple: aarch64-unknown-linux-gnu | |
| runner: linux-arm64-cpu8 | |
| dev_shell: .#devShells.aarch64-linux.glibc-2-28 | |
| interpreter: /lib/ld-linux-aarch64.so.1 | |
| uses: ./.github/workflows/build-binaries.yml | |
| with: | |
| package: openshell-server | |
| binary: openshell-gateway | |
| artifact-name: openshell-gateway-plain-${{ matrix.triple }} | |
| triple: ${{ matrix.triple }} | |
| runner: ${{ matrix.runner }} | |
| dev-shell: ${{ matrix.dev_shell }} | |
| cargo-version: ${{ needs.version.outputs.cargo }} | |
| extra-cargo-flags: --no-default-features | |
| interpreter: ${{ matrix.interpreter }} | |
| secrets: inherit | |
| build-driver-docker: | |
| needs: [pr_metadata, version] | |
| if: needs.pr_metadata.outputs.run_core_e2e == 'true' | |
| permissions: | |
| contents: read | |
| uses: ./.github/workflows/build-binaries.yml | |
| with: | |
| package: openshell-driver-docker | |
| binary: openshell-driver-docker | |
| triple: aarch64-unknown-linux-gnu | |
| runner: linux-arm64-cpu8 | |
| dev-shell: .#devShells.aarch64-linux.glibc-2-28 | |
| cargo-version: ${{ needs.version.outputs.cargo }} | |
| interpreter: /lib/ld-linux-aarch64.so.1 | |
| secrets: inherit | |
| build-driver-podman: | |
| needs: [pr_metadata, version] | |
| if: needs.pr_metadata.outputs.run_core_e2e == 'true' | |
| permissions: | |
| contents: read | |
| uses: ./.github/workflows/build-binaries.yml | |
| with: | |
| package: openshell-driver-podman | |
| binary: openshell-driver-podman | |
| triple: x86_64-unknown-linux-gnu | |
| runner: linux-amd64-cpu8 | |
| dev-shell: .#devShells.x86_64-linux.glibc-2-28 | |
| cargo-version: ${{ needs.version.outputs.cargo }} | |
| interpreter: /lib64/ld-linux-x86-64.so.2 | |
| secrets: inherit | |
| build-driver-kubernetes: | |
| needs: [pr_metadata, version] | |
| if: needs.pr_metadata.outputs.run_core_e2e == 'true' | |
| permissions: | |
| contents: read | |
| uses: ./.github/workflows/build-binaries.yml | |
| with: | |
| package: openshell-driver-kubernetes | |
| binary: openshell-driver-kubernetes | |
| triple: x86_64-unknown-linux-gnu | |
| runner: linux-amd64-cpu8 | |
| dev-shell: .#devShells.x86_64-linux.glibc-2-28 | |
| cargo-version: ${{ needs.version.outputs.cargo }} | |
| interpreter: /lib64/ld-linux-x86-64.so.2 | |
| secrets: inherit | |
| build-vm-driver: | |
| needs: [pr_metadata, version, build-sandbox] | |
| if: needs.pr_metadata.outputs.run_core_e2e == 'true' | |
| permissions: | |
| contents: read | |
| uses: ./.github/workflows/build-vm-driver.yml | |
| with: | |
| cargo-version: ${{ needs.version.outputs.cargo }} | |
| secrets: inherit | |
| build-gateway-image: | |
| needs: [pr_metadata, build-gateway] | |
| if: >- | |
| needs.pr_metadata.outputs.should_run == 'true' && | |
| (needs.pr_metadata.outputs.run_core_e2e == 'true' || | |
| needs.pr_metadata.outputs.run_kubernetes_ha_e2e == 'true' || | |
| needs.pr_metadata.outputs.run_kubernetes_credential_drivers_e2e == 'true') | |
| permissions: | |
| contents: read | |
| packages: write | |
| uses: ./.github/workflows/docker-build.yml | |
| with: | |
| component: gateway | |
| binary: openshell-gateway | |
| target-suffix: unknown-linux-gnu | |
| secrets: inherit | |
| build-supervisor-image: | |
| needs: [pr_metadata, build-sandbox] | |
| if: needs.pr_metadata.outputs.should_run == 'true' && needs.pr_metadata.outputs.run_any_e2e == 'true' | |
| permissions: | |
| contents: read | |
| packages: write | |
| uses: ./.github/workflows/docker-build.yml | |
| with: | |
| component: supervisor | |
| binary: openshell-sandbox | |
| target-suffix: unknown-linux-musl | |
| secrets: inherit | |
| docker-e2e: | |
| needs: [pr_metadata, build-cli, build-gateway, build-supervisor-image] | |
| if: needs.pr_metadata.outputs.should_run == 'true' && needs.pr_metadata.outputs.run_core_e2e == 'true' | |
| permissions: | |
| actions: read | |
| contents: read | |
| packages: read | |
| uses: ./.github/workflows/e2e-docker-test.yml | |
| with: | |
| image-tag: ${{ github.sha }} | |
| runner: linux-arm64-cpu8 | |
| podman-e2e: | |
| needs: [pr_metadata, build-cli, build-gateway, build-supervisor-image] | |
| if: needs.pr_metadata.outputs.should_run == 'true' && needs.pr_metadata.outputs.run_core_e2e == 'true' | |
| permissions: | |
| actions: read | |
| contents: read | |
| packages: read | |
| uses: ./.github/workflows/e2e-podman-test.yml | |
| with: | |
| image-tag: ${{ github.sha }} | |
| vm-e2e: | |
| needs: [pr_metadata, build-cli, build-gateway, build-vm-driver] | |
| if: needs.pr_metadata.outputs.should_run == 'true' && needs.pr_metadata.outputs.run_core_e2e == 'true' | |
| permissions: | |
| actions: read | |
| contents: read | |
| packages: read | |
| uses: ./.github/workflows/e2e-vm-test.yml | |
| docker-external-driver-e2e: | |
| needs: [pr_metadata, build-cli, build-gateway-plain, build-driver-docker, build-supervisor-image] | |
| if: needs.pr_metadata.outputs.should_run == 'true' && needs.pr_metadata.outputs.run_core_e2e == 'true' | |
| permissions: | |
| actions: read | |
| contents: read | |
| packages: read | |
| uses: ./.github/workflows/e2e-docker-test.yml | |
| with: | |
| image-tag: ${{ github.sha }} | |
| runner: linux-arm64-cpu8 | |
| gateway-artifact: openshell-gateway-plain-aarch64-unknown-linux-gnu | |
| external-driver-binary: openshell-driver-docker | |
| suite-matrix: >- | |
| [{"suite":"external-driver","cmd":"mise run --no-deps --skip-deps e2e:docker:external-driver","apt_packages":"openssh-client","python_proto":false,"mcp":false}] | |
| podman-external-driver-e2e: | |
| needs: [pr_metadata, build-cli, build-gateway-plain, build-driver-podman, build-supervisor-image] | |
| if: needs.pr_metadata.outputs.should_run == 'true' && needs.pr_metadata.outputs.run_core_e2e == 'true' | |
| permissions: | |
| actions: read | |
| contents: read | |
| packages: read | |
| uses: ./.github/workflows/e2e-podman-test.yml | |
| with: | |
| image-tag: ${{ github.sha }} | |
| gateway-artifact: openshell-gateway-plain-x86_64-unknown-linux-gnu | |
| external-driver-binary: openshell-driver-podman | |
| suite-matrix: >- | |
| [{"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"}] | |
| vm-external-driver-e2e: | |
| needs: [pr_metadata, build-cli, build-gateway-plain, build-vm-driver] | |
| if: needs.pr_metadata.outputs.should_run == 'true' && needs.pr_metadata.outputs.run_core_e2e == 'true' | |
| permissions: | |
| actions: read | |
| contents: read | |
| packages: read | |
| uses: ./.github/workflows/e2e-vm-test.yml | |
| with: | |
| gateway-artifact: openshell-gateway-plain-x86_64-unknown-linux-gnu | |
| suite-name: external-driver | |
| e2e-task: e2e:vm:external-driver | |
| gpu-e2e: | |
| needs: [pr_metadata, build-cli, build-gateway, build-supervisor-image] | |
| if: needs.pr_metadata.outputs.should_run == 'true' && needs.pr_metadata.outputs.run_gpu_e2e == 'true' | |
| permissions: | |
| actions: read | |
| contents: read | |
| packages: read | |
| uses: ./.github/workflows/e2e-gpu-test.yaml | |
| with: | |
| image-tag: ${{ github.sha }} | |
| kubernetes-e2e: | |
| needs: [pr_metadata, build-cli, build-gateway-image, build-supervisor-image] | |
| if: needs.pr_metadata.outputs.should_run == 'true' && needs.pr_metadata.outputs.run_core_e2e == 'true' | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| include: | |
| - agent_sandbox_api: v1beta1 | |
| agent_sandbox_version: v0.5.0 | |
| topology: combined | |
| extra_helm_values: "" | |
| - agent_sandbox_api: v1alpha1 | |
| agent_sandbox_version: v0.4.6 | |
| topology: combined | |
| extra_helm_values: "" | |
| - agent_sandbox_api: v1beta1 | |
| agent_sandbox_version: v0.5.0 | |
| topology: sidecar | |
| extra_helm_values: deploy/helm/openshell/ci/values-sidecar.yaml | |
| permissions: | |
| actions: read | |
| contents: read | |
| packages: read | |
| uses: ./.github/workflows/e2e-kubernetes-test.yml | |
| with: | |
| image-tag: ${{ github.sha }} | |
| job-name: Kubernetes E2E (Rust smoke, ${{ matrix.topology }}, Agent Sandbox ${{ matrix.agent_sandbox_api }}) | |
| agent-sandbox-version: ${{ matrix.agent_sandbox_version }} | |
| extra-helm-values: ${{ matrix.extra_helm_values }} | |
| kubernetes-workspace-managed-e2e: | |
| needs: [pr_metadata, build-cli, build-gateway-image, build-supervisor-image] | |
| if: needs.pr_metadata.outputs.should_run == 'true' && needs.pr_metadata.outputs.run_core_e2e == 'true' | |
| permissions: | |
| actions: read | |
| contents: read | |
| packages: read | |
| uses: ./.github/workflows/e2e-kubernetes-test.yml | |
| with: | |
| image-tag: ${{ github.sha }} | |
| job-name: Kubernetes E2E (workspace managed mode) | |
| e2e-task: e2e:kubernetes:workspace-managed | |
| kubernetes-external-driver-e2e: | |
| needs: [pr_metadata, build-cli, build-gateway-plain, build-driver-kubernetes, build-supervisor-image] | |
| if: needs.pr_metadata.outputs.should_run == 'true' && needs.pr_metadata.outputs.run_core_e2e == 'true' | |
| permissions: | |
| actions: read | |
| contents: read | |
| packages: read | |
| uses: ./.github/workflows/e2e-kubernetes-test.yml | |
| with: | |
| image-tag: ${{ github.sha }} | |
| job-name: Kubernetes E2E (external compute driver) | |
| e2e-task: e2e:kubernetes:external-driver | |
| gateway-artifact: openshell-gateway-plain-x86_64-unknown-linux-gnu | |
| external-driver-binary: openshell-driver-kubernetes | |
| cluster-images: supervisor | |
| kubernetes-workspace-operator-e2e: | |
| needs: [pr_metadata, build-cli, build-gateway-image, build-supervisor-image] | |
| if: needs.pr_metadata.outputs.should_run == 'true' && needs.pr_metadata.outputs.run_core_e2e == 'true' | |
| permissions: | |
| actions: read | |
| contents: read | |
| packages: read | |
| uses: ./.github/workflows/e2e-kubernetes-test.yml | |
| with: | |
| image-tag: ${{ github.sha }} | |
| job-name: Kubernetes E2E (workspace operator mode) | |
| e2e-task: e2e:kubernetes:workspace-operator | |
| kubernetes-ha-e2e: | |
| needs: [pr_metadata, build-cli, build-gateway-image, build-supervisor-image] | |
| if: needs.pr_metadata.outputs.should_run == 'true' && needs.pr_metadata.outputs.run_kubernetes_ha_e2e == 'true' | |
| permissions: | |
| actions: read | |
| contents: read | |
| packages: read | |
| uses: ./.github/workflows/e2e-kubernetes-test.yml | |
| with: | |
| image-tag: ${{ github.sha }} | |
| job-name: Kubernetes HA E2E (Rust smoke) | |
| extra-helm-values: deploy/helm/openshell/ci/values-high-availability.yaml | |
| external-postgres-secret: openshell-ha-pg | |
| kubernetes-credential-drivers-e2e: | |
| needs: [pr_metadata, build-cli, build-gateway-image, build-supervisor-image] | |
| if: needs.pr_metadata.outputs.should_run == 'true' && needs.pr_metadata.outputs.run_kubernetes_credential_drivers_e2e == 'true' | |
| permissions: | |
| actions: read | |
| contents: read | |
| packages: read | |
| uses: ./.github/workflows/e2e-kubernetes-test.yml | |
| with: | |
| image-tag: ${{ github.sha }} | |
| job-name: Kubernetes Credential Drivers E2E | |
| e2e-task: e2e:kubernetes:credential-drivers | |
| core-e2e-result: | |
| name: Core E2E result | |
| needs: [pr_metadata, docker-e2e, podman-e2e, vm-e2e, docker-external-driver-e2e, podman-external-driver-e2e, vm-external-driver-e2e, kubernetes-e2e, kubernetes-external-driver-e2e, kubernetes-workspace-managed-e2e, kubernetes-workspace-operator-e2e] | |
| if: always() && needs.pr_metadata.outputs.should_run == 'true' && needs.pr_metadata.outputs.run_core_e2e == 'true' | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 | |
| with: | |
| persist-credentials: false | |
| - uses: ./.github/actions/check-job-results | |
| with: | |
| results: ${{ toJSON(needs) }} | |
| gpu-e2e-result: | |
| name: GPU E2E result | |
| needs: [pr_metadata, gpu-e2e] | |
| if: always() && needs.pr_metadata.outputs.should_run == 'true' && needs.pr_metadata.outputs.run_gpu_e2e == 'true' | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 | |
| with: | |
| persist-credentials: false | |
| - uses: ./.github/actions/check-job-results | |
| with: | |
| results: ${{ toJSON(needs) }} | |
| kubernetes-ha-e2e-result: | |
| name: Kubernetes HA E2E result | |
| needs: [pr_metadata, kubernetes-ha-e2e] | |
| if: always() && needs.pr_metadata.outputs.should_run == 'true' && needs.pr_metadata.outputs.run_kubernetes_ha_e2e == 'true' | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 | |
| with: | |
| persist-credentials: false | |
| - uses: ./.github/actions/check-job-results | |
| with: | |
| results: ${{ toJSON(needs) }} | |
| kubernetes-credential-drivers-e2e-result: | |
| name: Kubernetes Credential Drivers E2E result | |
| needs: [pr_metadata, kubernetes-credential-drivers-e2e] | |
| if: always() && needs.pr_metadata.outputs.should_run == 'true' && needs.pr_metadata.outputs.run_kubernetes_credential_drivers_e2e == 'true' | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 | |
| with: | |
| persist-credentials: false | |
| - uses: ./.github/actions/check-job-results | |
| with: | |
| results: ${{ toJSON(needs) }} |