name: Docker Build and Push

on:
  push:
    branches:
      - main
      - development
  workflow_dispatch:

jobs:
  build-and-push:
    runs-on: ubuntu-latest
    permissions:
      contents: write
      packages: write
      security-events: write

    steps:
    - name: Checkout code
      uses: actions/checkout@v4.1.2

    - name: Docker Setup QEMU
      uses: docker/setup-qemu-action@v3
      id: qemu
      with:
        platforms: amd64,arm64

    - name: Log into ghcr.io registry
      uses: docker/login-action@v3.1.0
      with:
        registry: ghcr.io
        username: ${{ github.repository_owner }}
        password: ${{ secrets.GITHUB_TOKEN }}

    - name: Set up Docker Buildx
      uses: docker/setup-buildx-action@v3.2.0

    - name: Log in to Docker Hub
      uses: docker/login-action@v3.1.0
      with:
        username: ${{ secrets.DOCKER_HUB_USERNAME }}
        password: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }}

    - name: Get branch name
      id: branch-name
      run: echo "branch=${GITHUB_REF#refs/heads/}" >> $GITHUB_OUTPUT

    - name: Set Docker tags
      id: docker_tags
      run: |
        if [ "${{ steps.branch-name.outputs.branch }}" = "main" ]; then
          echo "tags=ghcr.io/g0ldyy/comet:latest,docker.io/g0ldyy/comet:latest" >> $GITHUB_OUTPUT
        elif [ "${{ steps.branch-name.outputs.branch }}" = "development" ]; then
          echo "tags=ghcr.io/g0ldyy/comet:dev,docker.io/g0ldyy/comet:dev" >> $GITHUB_OUTPUT
        else
          echo "tags=ghcr.io/g0ldyy/comet:${{ steps.branch-name.outputs.branch }},docker.io/g0ldyy/comet:${{ steps.branch-name.outputs.branch }}" >> $GITHUB_OUTPUT
        fi

    - name: Build and push Docker image
      uses: docker/build-push-action@v5.3.0
      with:
        context: .
        file: ./Dockerfile
        platforms: linux/amd64,linux/arm64
        push: true
        cache-from: type=gha
        cache-to: type=gha,mode=max
        tags: ${{ steps.docker_tags.outputs.tags }}
