name: Build Laravel Container

permissions:
  contents: read
  packages: write
on:
  workflow_call:
  workflow_dispatch:

env:
  should_push: ${{ github.ref == 'refs/heads/main' }}

jobs:
  laravel-build:
    name: "Build: Laravel Container"
    runs-on: ubuntu-latest
    strategy:
      fail-fast: false
      matrix:
        version:
          - "8.0"
          - "8.1"
          - "8.2"
          - "8.3"
    steps:
      - uses: actions/checkout@v4
        with:
          sparse-checkout: laravel

      - uses: docker/setup-qemu-action@v2

      - uses: docker/setup-buildx-action@v2

      - uses: docker/login-action@v3
        name: Login to Docker Hub
        with:
          username: ${{ secrets.DOCKER_HUB_USERNAME }}
          password: ${{ secrets.DOCKER_HUB_PASSWORD }}

      - uses: docker/build-push-action@v3
        name: Build & Push
        with:
          context: laravel
          platforms: ${{ !env.ACT && 'linux/amd64,linux/arm64' || 'linux/amd64' }}
          pull: true
          push: ${{ env.should_push && !env.ACT }}
          build-args: |
            PHP_VERSION=${{ matrix.version }}
          tags: |
            ghcr.io/benzine-framework/laravel:php-${{ matrix.version }}
            benzine/laravel:php-${{ matrix.version }}
            matthewbaggett/laravel:${{ matrix.version }}
          cache-from: ${{ !env.ACT && 'type=gha' || 'type=local,src=/tmp' }}
          cache-to: ${{ !env.ACT && 'type=gha,mode=max' || 'type=local,dest=/tmp' }}
          build-contexts: |
            php:nginx=docker-image://ghcr.io/benzine-framework/php:nginx-8.2

  laravel-tag-latest:
    name: "Tag: Laravel Container"
    runs-on: ubuntu-latest
    needs: [laravel-build]
    steps:
      - uses: docker/login-action@v3
        name: Login to Docker Hub
        with:
          username: ${{ secrets.DOCKER_HUB_USERNAME }}
          password: ${{ secrets.DOCKER_HUB_PASSWORD }}

      - name: "Retag matthewbaggett/laravel:8.3 to matthewbaggett/laravel:latest"
        if: ${{ !env.ACT }}
        run: |
          docker pull matthewbaggett/laravel:8.3
          docker tag matthewbaggett/laravel:8.3 matthewbaggett/laravel:latest
          docker push matthewbaggett/laravel:latest