name: Build and Push donut-sync Docker Image

on:
  push:
    branches: [main]
    paths:
      - "donut-sync/**"
  workflow_call:
    inputs:
      tag:
        description: "Docker tag (e.g., v1.0.0)"
        required: true
        type: string
  workflow_dispatch:
    inputs:
      tag:
        description: "Docker tag (e.g., v1.0.0, latest)"
        required: true
        default: "latest"

permissions:
  contents: read

env:
  REGISTRY: docker.io
  IMAGE_NAME: donutbrowser/donut-sync

jobs:
  build-and-push:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout repository
        uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 #v7.0.0

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

      - name: Log in to Docker Hub
        uses: docker/login-action@af1e73f918a031802d376d3c8bbc3fe56130a9b0 #v4.4.0
        with:
          username: ${{ secrets.DOCKERHUB_USERNAME }}
          password: ${{ secrets.DOCKERHUB_TOKEN }}

      - name: Determine tags
        id: tags
        run: |
          TAGS=""
          INPUT_TAG="${{ inputs.tag }}"

          if [ -n "$INPUT_TAG" ]; then
            # Called from release workflow or manual dispatch
            TAGS="${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${INPUT_TAG}"
            TAGS="${TAGS},${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:latest"
          elif [ "${{ github.event_name }}" = "push" ]; then
            # Push to main (nightly): tag with nightly and commit SHA
            SHORT_SHA=$(echo "${{ github.sha }}" | cut -c1-7)
            TAGS="${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:nightly"
            TAGS="${TAGS},${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:nightly-${SHORT_SHA}"
          fi

          echo "tags=${TAGS}" >> "$GITHUB_OUTPUT"
          echo "Tags: ${TAGS}"

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