name: docker publish permissions: contents: read on: workflow_dispatch: push: tags: - 'v*' env: REGISTRY: ghcr.io IMAGE_NAME_FRONTEND: ${{ github.repository }}-frontend IMAGE_NAME_BACKEND: ${{ github.repository }}-backend IMAGE_NAME_COMBINED: ${{ github.repository }} jobs: build-and-push-image: runs-on: ubuntu-24.04 permissions: contents: read packages: write steps: - name: Checkout repository uses: actions/checkout@v6 - name: Set up QEMU uses: docker/setup-qemu-action@v4 - name: Set up Docker Buildx uses: docker/setup-buildx-action@v4 - name: Log in to the Container registry uses: docker/login-action@v4.2.0 with: registry: ${{ env.REGISTRY }} username: ${{ github.actor }} password: ${{ secrets.GITHUB_TOKEN }} - name: Extract metadata (tags, labels) for frontend Docker image id: meta_frontend uses: docker/metadata-action@v6 with: images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME_FRONTEND }} - name: Extract metadata (tags, labels) for backend Docker image id: meta_backend uses: docker/metadata-action@v6 with: images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME_BACKEND }} - name: Extract metadata (tags, labels) for combined Docker image id: meta_combined uses: docker/metadata-action@v6 with: images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME_COMBINED }} - name: Build and push frontend Docker image uses: docker/build-push-action@v7.2.0 with: context: frontend push: true file: frontend/Dockerfile tags: ${{ steps.meta_frontend.outputs.tags }} labels: ${{ steps.meta_frontend.outputs.labels }} platforms: linux/amd64,linux/arm64/v8 - name: Build and push backend Docker image uses: docker/build-push-action@v7.2.0 with: context: backend push: true file: backend/Dockerfile tags: ${{ steps.meta_backend.outputs.tags }} labels: ${{ steps.meta_backend.outputs.labels }} platforms: linux/amd64,linux/arm64/v8 - name: Build and push combined Docker image uses: docker/build-push-action@v7.2.0 with: context: ./ push: true file: Dockerfile tags: ${{ steps.meta_combined.outputs.tags }} labels: ${{ steps.meta_combined.outputs.labels }} platforms: linux/amd64,linux/arm64/v8