diff --git a/.github/workflows/release-studio-sandbox.yaml b/.github/workflows/release-studio-sandbox.yaml index d7f21d661b..8226906b36 100644 --- a/.github/workflows/release-studio-sandbox.yaml +++ b/.github/workflows/release-studio-sandbox.yaml @@ -110,6 +110,13 @@ jobs: type=raw,value=latest,enable=${{ github.event_name == 'workflow_dispatch' }} type=sha,format=short + - name: Set up ARM64 emulation + if: steps.tag-check.outputs.exists != 'true' + uses: docker/setup-qemu-action@v4 + with: + platforms: arm64 + reset: true + - name: Set up Docker Buildx if: steps.tag-check.outputs.exists != 'true' uses: docker/setup-buildx-action@v3 @@ -128,8 +135,8 @@ jobs: cache-to: type=gha,mode=max # Multi-arch to match every sibling image (Studio API, orgfs-sidecar, # sandbox-netinit, s3-sync). Without arm64 the sandbox can't run - # natively on Apple Silicon / arm64 nodes. buildx emulates arm64 via - # the runner's preinstalled binfmt, same as orgfs-sidecar. + # natively on Apple Silicon / arm64 nodes. Buildx uses the ARM64 + # emulator registered above. platforms: linux/amd64,linux/arm64 - name: Install cosign diff --git a/.github/workflows/sandbox-arm64-smoke.yml b/.github/workflows/sandbox-arm64-smoke.yml new file mode 100644 index 0000000000..71e2538181 --- /dev/null +++ b/.github/workflows/sandbox-arm64-smoke.yml @@ -0,0 +1,48 @@ +name: Sandbox ARM64 smoke + +on: + pull_request: + paths: + - "packages/sandbox/image/Dockerfile" + - ".github/workflows/release-studio-sandbox.yaml" + - ".github/workflows/sandbox-arm64-smoke.yml" + workflow_dispatch: + +permissions: + contents: read + +concurrency: + group: sandbox-arm64-smoke-${{ github.ref }} + cancel-in-progress: true + +jobs: + node-npm: + name: Node and npm under ARM64 emulation + runs-on: ubuntu-latest + timeout-minutes: 15 + steps: + - uses: actions/checkout@v4 + + - name: Set up ARM64 emulation + uses: docker/setup-qemu-action@v4 + with: + platforms: arm64 + reset: true + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + + - name: Build the Dockerfile's Node base + run: | + docker buildx build --load --platform linux/arm64 \ + --target node-dist --tag sandbox-node-arm64-smoke \ + --file packages/sandbox/image/Dockerfile packages/sandbox + + - name: Exercise Node and npm + run: | + docker run --rm --platform linux/arm64 sandbox-node-arm64-smoke \ + sh -ec ' + node --version + npm --version + node --print process.arch | grep --line-regexp arm64 + '