name: "Build: Docker"

permissions:
  contents: read
  packages: write

on:
  workflow_call:
  workflow_dispatch:

concurrency:
  group: ${{ github.head_ref || github.run_id }}
  cancel-in-progress: true

env:
  PLATFORMS: linux/amd64,linux/arm64
  CANDIDATE_IMAGE: ghcr.io/benzine-framework/bouncer:build-${{ github.sha }}

jobs:
  build:
    name: Build Swarm Loadbalancer
    runs-on: ubuntu-latest
    steps:
      - uses: benzine-framework/action-setup-php@main
      - uses: benzine-framework/action-setup-docker@main
        with:
          ghcr_user: ${{ github.repository_owner }}
          ghcr_token: ${{ secrets.GHCR_TOKEN }}
          docker_hub_user: ${{ secrets.DOCKER_HUB_USER }}
          docker_hub_token: ${{ secrets.DOCKER_HUB_TOKEN }}
      - name: "Build & Push Candidate Image as ${{ env.CANDIDATE_IMAGE }}"
        uses: docker/build-push-action@v5
        with:
          context: .
          target: bouncer
          build-contexts: |
            php:cli=docker-image://ghcr.io/benzine-framework/php:cli-${{ steps.read-php-version.outputs.php_version }}
          build-args: |
            GIT_SHA=${{ github.sha }}
            GIT_BUILD_ID=${{ github.ref_name }}
            GIT_COMMIT_MESSAGE=${{ github.event.head_commit.message }}
            BUILD_DATE=${{ steps.date.outputs.container_build_datetime }}
          platforms: ${{ !env.ACT && env.PLATFORMS || 'linux/amd64' }}
          pull: true
          push: true
          tags: ${{ env.CANDIDATE_IMAGE }}
          cache-from: ${{ !env.ACT && 'type=gha' || '' }}
          cache-to: ${{ !env.ACT && 'type=gha,mode=max' || '' }}