name: GPU E2E Test on: workflow_call: inputs: image-tag: description: "Image tag to test (typically the commit SHA)" required: true type: string permissions: contents: read packages: read jobs: e2e-gpu: name: "E2E GPU (${{ matrix.name }})" runs-on: ${{ matrix.runner }} continue-on-error: ${{ matrix.experimental }} timeout-minutes: 30 strategy: fail-fast: false matrix: include: - name: linux-arm64 runner: linux-arm64-gpu-l4-latest-1 cluster: e2e-gpu-arm64 port: "8083" experimental: false - name: linux-amd64 runner: linux-amd64-gpu-rtxpro6000-latest-1 cluster: e2e-gpu-amd64 port: "8084" experimental: false - name: wsl-amd64 runner: wsl-amd64-gpu-rtxpro6000-latest-1 cluster: e2e-gpu-wsl port: "8085" experimental: true container: image: ghcr.io/nvidia/openshell/ci:latest credentials: username: ${{ github.actor }} password: ${{ secrets.GITHUB_TOKEN }} options: --privileged volumes: - /var/run/docker.sock:/var/run/docker.sock env: MISE_GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} IMAGE_TAG: ${{ inputs.image-tag }} OPENSHELL_REGISTRY: ghcr.io/nvidia/openshell OPENSHELL_REGISTRY_HOST: ghcr.io OPENSHELL_REGISTRY_NAMESPACE: nvidia/openshell OPENSHELL_REGISTRY_USERNAME: ${{ github.actor }} OPENSHELL_REGISTRY_PASSWORD: ${{ secrets.GITHUB_TOKEN }} OPENSHELL_GATEWAY: ${{ matrix.cluster }} steps: - uses: actions/checkout@v4 - name: Log in to GHCR run: echo "${{ secrets.GITHUB_TOKEN }}" | docker login ghcr.io -u "${{ github.actor }}" --password-stdin - name: Pull cluster image run: docker pull ghcr.io/nvidia/openshell/cluster:${{ inputs.image-tag }} - name: Install Python dependencies and generate protobuf stubs run: uv sync --frozen && mise run --no-deps python:proto - name: Bootstrap GPU cluster env: GATEWAY_HOST: host.docker.internal GATEWAY_PORT: ${{ matrix.port }} CLUSTER_NAME: ${{ matrix.cluster }} # Passes --gpu to the gateway bootstrap so the cluster comes up with GPU passthrough enabled. CLUSTER_GPU: "1" SKIP_IMAGE_PUSH: "1" SKIP_CLUSTER_IMAGE_BUILD: "1" OPENSHELL_CLUSTER_IMAGE: ghcr.io/nvidia/openshell/cluster:${{ inputs.image-tag }} run: mise run --no-deps --skip-deps cluster - name: Run tests run: mise run --no-deps --skip-deps e2e:python:gpu