name: build-images # Build + push container images for ProofedMesh services on every push to # main. PRs run the build to catch Dockerfile breakage but do not push. # # The repository is sha256 — same gotchas as validate.yml apply: no # actions/checkout, clone manually from a trixie/alpine container with # git ≥ 2.42. on: push: branches: [main] pull_request: branches: [main] jobs: signing-service: name: signing-service image runs-on: ubuntu-latest container: image: debian:trixie-slim options: --user 0:0 env: REGISTRY: harbor.basicstack.de IMAGE_REPO: harbor.basicstack.de/basicstack/signing-service steps: - name: Install git + buildx client + ca-certs run: | set -euo pipefail apt-get update # Debian trixie: `docker.io` only installs the daemon; the CLI # (`/usr/bin/docker`) ships in `docker-cli`, which is a Recommends # and therefore excluded by `--no-install-recommends`. Add it # explicitly. apt-get install -y --no-install-recommends \ git curl ca-certificates docker.io docker-cli git --version docker --version - name: Clone repository (sha256-aware) run: | set -euo pipefail git clone --depth=1 --branch="${GITHUB_REF_NAME}" \ "https://x-access-token:${GITHUB_TOKEN}@forgejo.basicstack.de/${GITHUB_REPOSITORY}.git" \ "${GITHUB_WORKSPACE}" cd "${GITHUB_WORKSPACE}" git log -1 --oneline - name: Resolve tags id: tags working-directory: ${{ github.workspace }} run: | set -euo pipefail SHA="$(git rev-parse --short HEAD)" echo "sha=${SHA}" >> "${GITHUB_OUTPUT}" echo "image_sha=${IMAGE_REPO}:${SHA}" >> "${GITHUB_OUTPUT}" echo "image_main=${IMAGE_REPO}:main" >> "${GITHUB_OUTPUT}" - name: Build image working-directory: ${{ github.workspace }} run: | set -euo pipefail docker build \ -f services/signing-service/Dockerfile \ -t "${{ steps.tags.outputs.image_sha }}" \ -t "${{ steps.tags.outputs.image_main }}" \ . - name: Login to Harbor (push jobs only) if: github.event_name == 'push' && github.ref == 'refs/heads/main' run: | set -eu echo "${{ secrets.HARBOR_PASSWORD }}" | \ docker login "${REGISTRY}" --username "${{ secrets.HARBOR_USERNAME }}" --password-stdin - name: Push image (main only) if: github.event_name == 'push' && github.ref == 'refs/heads/main' run: | set -eu docker push "${{ steps.tags.outputs.image_sha }}" docker push "${{ steps.tags.outputs.image_main }}"