ci: use the remote buildx driver, and build amd64 only #6
@@ -28,6 +28,11 @@ jobs:
|
|||||||
. .venv/bin/activate
|
. .venv/bin/activate
|
||||||
python -m pytest tests/ -q
|
python -m pytest tests/ -q
|
||||||
|
|
||||||
|
# NOTE: the build job deliberately does NOT have a kubeconfig. The
|
||||||
|
# `KUBEC_CONFIG_BUILDX` secret is cluster-admin-equivalent, and a build step
|
||||||
|
# that has no need of the cluster should not be able to read it. The deploy
|
||||||
|
# step, added in a later PR, gets its own job with the kubeconfig - that way
|
||||||
|
# a compromised dependency in the build cannot reach the cluster.
|
||||||
build:
|
build:
|
||||||
name: Build and push image
|
name: Build and push image
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
@@ -39,18 +44,25 @@ jobs:
|
|||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
- name: Create Kubeconfig
|
- name: Set up Docker Buildx (remote -> persistent buildkit daemon)
|
||||||
run: |
|
|
||||||
mkdir $HOME/.kube
|
|
||||||
echo "${{ secrets.KUBEC_CONFIG_BUILDX }}" > $HOME/.kube/config
|
|
||||||
|
|
||||||
- name: Set up Docker Buildx
|
|
||||||
uses: docker/setup-buildx-action@v3
|
uses: docker/setup-buildx-action@v3
|
||||||
with:
|
with:
|
||||||
driver: kubernetes
|
# The `kubernetes` driver talks to the cluster API, which needs the
|
||||||
driver-opts: |
|
# k3s CA certificate. The job container does not have it, so the
|
||||||
namespace=gitea-runner
|
# bootstrap failed with "x509: certificate signed by unknown
|
||||||
qemu.install=true
|
# authority".
|
||||||
|
#
|
||||||
|
# The `remote` driver talks straight to the buildkit daemon that is
|
||||||
|
# already running in the cluster, so no cluster API access (and no
|
||||||
|
# kubeconfig) is needed at all. This is the same pattern the
|
||||||
|
# wedding-photos workflow uses successfully.
|
||||||
|
#
|
||||||
|
# NOTE: `endpoint` must be passed as a top-level key. The action
|
||||||
|
# appends it as the POSITIONAL argument to
|
||||||
|
# `buildx create --driver remote <endpoint>`; putting it in
|
||||||
|
# driver-opts instead yields "ERROR: no remote endpoint provided".
|
||||||
|
driver: remote
|
||||||
|
endpoint: tcp://buildkit.gitea-runner.svc:1234
|
||||||
|
|
||||||
- name: Login to Docker Registry
|
- name: Login to Docker Registry
|
||||||
uses: docker/login-action@v3
|
uses: docker/login-action@v3
|
||||||
@@ -65,7 +77,10 @@ jobs:
|
|||||||
context: .
|
context: .
|
||||||
push: true
|
push: true
|
||||||
file: base.Dockerfile
|
file: base.Dockerfile
|
||||||
platforms: linux/amd64,linux/arm64
|
# amd64 only. A multi-arch build runs qemu emulation, which crashes
|
||||||
|
# the buildkit pod on this NUC (exit 255, SandboxChanged) and the
|
||||||
|
# build then hangs for many minutes. The cluster is amd64.
|
||||||
|
platforms: linux/amd64
|
||||||
tags: |
|
tags: |
|
||||||
git.aridgwayweb.com/armistace/beer_base_image:latest
|
git.aridgwayweb.com/armistace/beer_base_image:latest
|
||||||
|
|
||||||
@@ -75,6 +90,6 @@ jobs:
|
|||||||
context: .
|
context: .
|
||||||
push: true
|
push: true
|
||||||
file: flask.Dockerfile
|
file: flask.Dockerfile
|
||||||
platforms: linux/amd64,linux/arm64
|
platforms: linux/amd64
|
||||||
tags: |
|
tags: |
|
||||||
git.aridgwayweb.com/armistace/beer-data:latest
|
git.aridgwayweb.com/armistace/beer-data:latest
|
||||||
|
|||||||
Reference in New Issue
Block a user