name: Build and push runner images on: push: paths: - 'k8s/infra/forgejo-runner/Dockerfile.golang' - 'k8s/infra/forgejo-runner/Dockerfile.rust' - 'k8s/infra/forgejo-runner/Dockerfile.node' branches: - main pull_request: paths: - 'k8s/infra/forgejo-runner/Dockerfile.golang' - 'k8s/infra/forgejo-runner/Dockerfile.rust' - 'k8s/infra/forgejo-runner/Dockerfile.node' - '.gitea/workflows/build-runner-images.yml' jobs: build-runners: runs-on: golang # Unified CI pattern: golang label → golang:1.26-bookworm (Debian, root, apt-get) # Install Node.js + docker in steps. actions/checkout@v4 needs Node.js. steps: - name: Install dependencies run: | apt-get update apt-get install -y --no-install-recommends nodejs docker.io rm -rf /var/lib/apt/lists/* - uses: actions/checkout@v4 - name: Get commit SHA id: sha run: | SHORT_SHA=$(git rev-parse --short HEAD) echo "short_sha=${SHORT_SHA}" >> $GITHUB_OUTPUT - name: Build all runner images run: | set -e for RUNNER in golang rust node; do echo "📦 Building ${RUNNER}-runner..." docker build -f "k8s/infra/forgejo-runner/Dockerfile.${RUNNER}" \ -t "${IMAGE_BASE}/forgejo-runner-${RUNNER}:${{ steps.sha.outputs.short_sha }}" \ -t "${IMAGE_BASE}/forgejo-runner-${RUNNER}:latest" \ . echo "✅ Built ${RUNNER}-runner" done - name: Push images (main only) if: github.event_name == 'push' run: | echo "${REGISTRY_TOKEN}" | docker login "${REGISTRY}" \ --username "${REGISTRY_USER}" --password-stdin for RUNNER in golang rust node; do docker push "${IMAGE_BASE}/forgejo-runner-${RUNNER}:${{ steps.sha.outputs.short_sha }}" docker push "${IMAGE_BASE}/forgejo-runner-${RUNNER}:latest" echo "✅ Pushed ${RUNNER}-runner" done env: REGISTRY_USER: ${{ secrets.FORGEJO_REGISTRY_USER }} REGISTRY_TOKEN: ${{ secrets.FORGEJO_REGISTRY_TOKEN }} env: REGISTRY: forgejo.riotpiao.com IMAGE_BASE: forgejo.riotpiao.com/rock