name: docker

on:
  push:
    branches: [ "main" ]
    paths:
      - "src/**"
      - ".github/workflows/docker-image.yml"
  pull_request:
    branches: [ "main" ]
    paths:
      - "src/**"
      - ".github/workflows/docker-image.yml"

env:
  REGISTRY: ghcr.io
  IMAGE_NAME: ${{ github.repository }}

jobs:

  build-and-push-image:

    runs-on: ubuntu-latest

    permissions:
      contents: read
      packages: write

    steps:
      - name: Checkout repository
        uses: actions/checkout@v4

      - name: Log in to the Container registry
        uses: docker/login-action@v3.0.0
        with:
          registry: ${{ env.REGISTRY }}
          username: ${{ github.actor }}
          password: ${{ secrets.GITHUB_TOKEN }}
          
      - name: Extract metadata (tags, labels) for Docker
        id: meta
        uses: docker/metadata-action@v5.5.1
        with:
          images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
          tags: |
            # set latest tag for default branch
            type=raw,value=latest,enable={{is_default_branch}}
            # set date-stamped tag if default branch
            type=raw,value={{date 'YYYYMMDD'}},enable={{is_default_branch}}
            # set branch-name if not default branch
            type=raw,value={{branch}},enable=${{ github.ref != format('refs/heads/{0}', 'main') }}
            # branch event
            type=ref,event=branch
            # tag event
            type=ref,event=tag
            # pull request event
            type=ref,event=pr

      - name: Build and push Docker image
        uses: docker/build-push-action@v5.1.0
        with:
          platform: linux/amd64,linux/arm64
          context: ./src
          push: true
          tags: ${{ steps.meta.outputs.tags }}
          labels: ${{ steps.meta.outputs.labels }}