name: ci on: push: branches: - main jobs: build-test-push: runs-on: ubuntu-latest env: IMAGE: git.danhenry.dev/thelab/work-queue-api DOCKER_REGISTRY: ${{ secrets.DOCKER_REGISTRY }} DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }} DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }} steps: - name: Install system dependencies run: | apt-get update apt-get install -y --no-install-recommends curl ca-certificates git docker.io qemu-user-static - name: Install uv and run tests run: | curl -LsSf https://astral.sh/uv/install.sh | sh export PATH="$HOME/.local/bin:$PATH" uv sync --frozen --dev uv run pytest - name: Configure binfmt for cross-builds run: docker run --privileged --rm tonistiigi/binfmt --install amd64,arm64 - name: Create buildx builder run: | docker buildx rm multiarch-builder || true docker buildx create --name multiarch-builder --use docker buildx inspect --bootstrap - name: Log in to registry run: echo "$DOCKER_PASSWORD" | docker login "$DOCKER_REGISTRY" -u "$DOCKER_USERNAME" --password-stdin - name: Build and push multi-arch image run: | SHORT_SHA=$(git rev-parse --short HEAD) docker buildx build \ --platform linux/amd64,linux/arm64 \ --push \ -t ${IMAGE}:latest \ -t ${IMAGE}:${SHORT_SHA} \ .