name: Docker Test & Publish on: push: # branches: # - "main" tags: - "*" paths-ignore: - ".github/**" - "!.github/workflows/docker.yml" - ".vscode/**" - "doc/**" - ".gitignore" - "LICENSE" - "README" pull_request: branches: - "main" paths: - "Dockerfile" workflow_dispatch: permissions: contents: read packages: write jobs: base: runs-on: ubuntu-24.04 name: Build base image steps: # Configure build environment - name: Checkout uses: actions/checkout@v3 - name: Fix https://github.com/actions/runner-images/issues/9959 run: sudo apt-get autopurge -y needrestart - name: Set up Docker Buildx uses: docker/setup-buildx-action@v2 # Authenticate with GHCR - name: Login to Github Container Registry if: ${{ github.event_name != 'pull_request' }} uses: docker/login-action@v2 with: registry: ghcr.io username: ${{ github.actor }} password: ${{ secrets.GITHUB_TOKEN }} - name: Build base image uses: docker/build-push-action@v4 with: context: . push: ${{ github.event_name != 'pull_request' }} platforms: linux/amd64,linux/arm64 tags: ghcr.io/${{ github.repository_owner }}/base:latest cache-from: type=gha,scope=buildx-base-multi-arch cache-to: type=gha,scope=buildx-base-multi-arch,mode=max publish: needs: [base] runs-on: ubuntu-24.04 if: github.event_name != 'pull_request' strategy: matrix: project: [delta, bonfire, autumn, january, pushd] name: Build ${{ matrix.project }} image steps: # Configure build environment - name: Checkout uses: actions/checkout@v3 - name: Fix https://github.com/actions/runner-images/issues/9959 run: sudo apt-get autopurge -y needrestart - name: Set up Docker Buildx uses: docker/setup-buildx-action@v2 # Authenticate with Docker Hub and GHCR - name: Login to DockerHub uses: docker/login-action@v2 with: registry: docker.io username: ${{ secrets.DOCKERHUB_USERNAME }} password: ${{ secrets.DOCKERHUB_TOKEN }} - name: Login to Github Container Registry uses: docker/login-action@v2 with: registry: ghcr.io username: ${{ github.actor }} password: ${{ secrets.GITHUB_TOKEN }} # Resolve the correct project - uses: kanga333/variable-mapper@master id: export with: key: "${{ matrix.project }}" map: | { "delta": { "path": "crates/delta", "tag": "${{ github.repository_owner }}/server" }, "bonfire": { "path": "crates/bonfire", "tag": "${{ github.repository_owner }}/bonfire" }, "autumn": { "path": "crates/services/autumn", "tag": "${{ github.repository_owner }}/autumn" }, "january": { "path": "crates/services/january", "tag": "${{ github.repository_owner }}/january" }, "pushd": { "path": "crates/daemons/pushd", "tag": "${{ github.repository_owner }}/pushd" } } export_to: output # Configure metadata - name: Docker meta id: meta uses: docker/metadata-action@v4 with: images: | docker.io/${{ steps.export.outputs.tag }} ghcr.io/${{ steps.export.outputs.tag }} # Build crate image - name: Publish uses: docker/build-push-action@v4 with: context: . push: true platforms: linux/amd64,linux/arm64 file: ${{ steps.export.outputs.path }}/Dockerfile tags: ${{ steps.meta.outputs.tags }} build-args: | BASE_IMAGE=ghcr.io/${{ github.repository_owner }}/base:latest labels: ${{ steps.meta.outputs.labels }}