name: Build Redis

permissions:
  contents: read
  packages: write

on:
  workflow_call:
  workflow_dispatch:

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

jobs:
  redis-build:
    name: "Build"
    runs-on: ubuntu-latest
    strategy:
      fail-fast: false
      max-parallel: 15
      matrix:
        redis:
          - 3
          - 4
          - 5
          - 6
          - 6-alpine
          - 6-buster
          - 6.0
          - 6.2
          - 7
          - 7-alpine
          - 7-bookworm
          - 7.0
          - 7.2
          - latest
    steps:
      - name: "Setup: Setup QEMU"
        uses: docker/setup-qemu-action@v2

      - name: "Setup: Expose GitHub Runtime"
        uses: crazy-max/ghaction-github-runtime@v3

      - name: "Setup: Setup Docker Buildx"
        uses: docker/setup-buildx-action@v2

      - name: "Setup: Checkout Source"
        uses: actions/checkout@v4
        with:
          sparse-checkout: |
            redis

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

      - name: "Setup: Login to GHCR"
        uses: docker/login-action@v3
        with:
          registry: ghcr.io
          username: matthewbaggett
          password: ${{ secrets.GHCR_PASSWORD }}

      - name: "Build: Build Redis with Healthchecks"
        uses: docker/build-push-action@v5
        with:
          context: redis
          build-contexts: |
            redis:version=docker-image://redis:${{ matrix.redis }}
          build-args: |
            HEALTH_INTERVAL=10s
          platforms: ${{ !env.ACT && 'linux/amd64,linux/arm64' || 'linux/amd64' }}
          pull: true
          push: ${{ env.should_push && !env.ACT }}
          tags: |
            ${{ format('ghcr.io/benzine-framework/redis:{0}', matrix.redis) }}
            ${{ env.should_push && format('benzine/redis:{0}',matrix.redis) || '' }}
          cache-from: ${{ !env.ACT && 'type=gha' || '' }}
          cache-to: ${{ !env.ACT && 'type=gha,mode=max' || '' }}