name: "Build: Docker"

permissions:
  contents: read
  packages: write

on:
  workflow_call:
  workflow_dispatch:

env:
  PLATFORMS: ${{ vars.PLATFORMS }}
  DOCKER_IMAGE: ghcr.io/${{ github.repository }}

jobs:
  docker-build:
    name: Build Swarm Load Balancer
    runs-on: ${{ vars.RUNS_ON || 'ubuntu-latest' }}
    steps:
      - uses: benzine-framework/action-setup-php@main
      - uses: benzine-framework/action-get-datetime@main
      - uses: benzine-framework/action-setup-docker@main
        with:
          ghcr_user: ${{ vars.SERVICE_ACCOUNT_USERNAME }}
          ghcr_token: ${{ secrets.SERVICE_ACCOUNT_TOKEN }}
      - name: "Build & Push Candidate Image as ${{ env.CANDIDATE_IMAGE }}"
        uses: docker/build-push-action@v5
        with:
          context: .
          target: loadbalancer
          build-args: |
            MAINTAINER=${{ vars.PUBLIC_MAINTAINER || 'Matthew Baggett <matthew@baggett.me>' }}
            SOURCE_URL="https://github.com/${{ github.repository }}"
            GIT_SHA=${{ github.sha }}
            GIT_BUILD_ID=${{ github.ref_name }}
            GIT_COMMIT_MESSAGE=${{ github.event.head_commit.message }}
            BUILD_DATE=${{ env.ATOM }}
          platforms: ${{ github.actor != 'nektos/act' && vars.PLATFORMS || 'linux/amd64' }}
          pull: true
          push: ${{ github.ref == 'refs/heads/main' }}
          tags: |
            ${{ env.DOCKER_IMAGE }}:date-${{ env.DATE }}
            ${{ env.DOCKER_IMAGE }}:sha-${{ github.sha }}
          cache-from: ${{ env.DOCKER_CACHE_FROM }}
          cache-to: ${{ env.DOCKER_CACHE_TO }}