Files
OpenShell/.github/workflows/shadow-docker-build.yml
jtoelke2 55b0266ed5 fix(ci): make buildkitd-config opt-in for setup-buildx (#970)
#966 hard-coded `buildkitd-config: /etc/buildkit/buildkitd.toml` inside
the `driver: local` branch of the setup-buildx composite action. The only
caller using that driver is shadow-docker-build.yml, which runs inside
the ghcr.io/nvidia/openshell/ci:latest container — so the host-side
buildkitd.toml was invisible to docker/setup-buildx-action and every
matrix job failed at "Set up buildx".

Revert the hard-coded path and expose it as an opt-in input on the
action (empty default, passed through to both the remote and local
branches). Wire shadow-docker-build.yml to bind-mount /etc/buildkit
into the ci container and pass the path explicitly, so the action can
read the file from inside the container. Remote-driver callers are
unaffected (empty input is a no-op).

Signed-off-by: Jonas Toelke <jtoelke@nvidia.com>
2026-04-24 16:35:14 -05:00

99 lines
3.5 KiB
YAML
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
name: Shadow — Docker Build (local driver + GHA cache)
# OS-49 Phase 3 / PR 3 — non-blocking shadow of docker-build.yml.
#
# Exercises buildx's local (docker-container) driver plus GHA-cache
# (type=gha, scoped per component+arch) so Docker builds no longer depend on
# the in-cluster BuildKit pods. Per-arch matrix on nv-gha-runners; each job
# builds a single platform natively (no QEMU). No multi-arch manifest
# merging — that folds into the real cut-over in Phase 6.
#
# Plan, decision thresholds, and results: OS-127 Linear issue. Dispatch
# manually 4–5 times after merge to collect cold + warm numbers.
on:
push:
branches: [main]
workflow_dispatch:
permissions:
contents: read
packages: read
env:
MISE_GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
jobs:
shadow-build:
name: shadow ${{ matrix.component }} (${{ matrix.arch }})
strategy:
fail-fast: false
matrix:
component: [gateway, supervisor, cluster]
arch: [amd64, arm64]
include:
- arch: amd64
runner: linux-amd64-cpu8
- arch: arm64
runner: linux-arm64-cpu8
runs-on: ${{ matrix.runner }}
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
# Expose the nv-gha-runners buildkitd.toml (registry-mirror config)
# inside the container so docker/setup-buildx-action can read it.
# The file is pre-populated on every nv-gha-runner per:
# https://docs.gha-runners.nvidia.com/platform/best-practices/#use-docker-cache-for-buildkit
- /etc/buildkit:/etc/buildkit:ro
timeout-minutes: 45
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Mark workspace safe for git
run: git config --global --add safe.directory "$GITHUB_WORKSPACE"
- name: Install tools
run: mise install
- name: Set up buildx (local driver)
uses: ./.github/actions/setup-buildx
with:
driver: local
# Bind-mounted above via container.volumes; without that, the file
# is on the host but invisible to the action (which runs inside
# the ci:latest container).
buildkitd-config: /etc/buildkit/buildkitd.toml
- name: Package Helm chart (cluster only)
if: matrix.component == 'cluster'
run: |
mkdir -p deploy/docker/.build/charts
helm package deploy/helm/openshell -d deploy/docker/.build/charts/
- name: Build ${{ matrix.component }} (${{ matrix.arch }})
# Matches docker-build.yml's default EXTRA_CARGO_FEATURES so CI image
# content is comparable. No --push: the shadow measures build/cache
# mechanics, not publish behavior. Multi-arch manifests are Phase 6.
run: |
docker buildx build \
--builder openshell \
--platform linux/${{ matrix.arch }} \
--cache-from type=gha,scope=${{ matrix.component }}-${{ matrix.arch }} \
--cache-to type=gha,mode=max,scope=${{ matrix.component }}-${{ matrix.arch }} \
--build-arg EXTRA_CARGO_FEATURES=openshell-core/dev-settings \
--load \
--file deploy/docker/Dockerfile.images \
--target ${{ matrix.component }} \
.
- name: buildx du
if: always()
run: docker buildx du --builder openshell || true