name: Docker
on:
  pull_request:
    paths:
      - .github/workflows/docker.yml
      - Dockerfile
  push:
    paths:
      - .github/workflows/docker.yml
      - Dockerfile
    branches-ignore:
      - master
  release:
    types:
      - published
permissions:
  contents: read
jobs:
  ubuntu:
    if: startsWith(github.repository, 'Homebrew/')
    runs-on: ubuntu-22.04
    strategy:
      fail-fast: false
      matrix:
        version: ["18.04", "20.04", "22.04", "24.04"]
    steps:
      - name: Checkout
        uses: actions/checkout@v4
        with:
          fetch-depth: 0
          persist-credentials: false

      - name: Fetch origin/master from Git
        run: git fetch origin master

      - name: Build Docker image
        run: |
          brew_version="$(git describe --tags --dirty --abbrev=7)"
          echo "Building for Homebrew ${brew_version}"
          docker build -t brew \
               --build-arg=version=${{matrix.version}} \
               --label org.opencontainers.image.created="$(date --rfc-3339=seconds --utc)" \
               --label org.opencontainers.image.url="https://brew.sh" \
               --label org.opencontainers.image.documentation="https://docs.brew.sh" \
               --label org.opencontainers.image.source="https://github.com/${GITHUB_REPOSITORY}" \
               --label org.opencontainers.image.version="${brew_version}" \
               --label org.opencontainers.image.revision="${GITHUB_SHA}" \
               --label org.opencontainers.image.vendor="${GITHUB_REPOSITORY_OWNER}" \
               --label org.opencontainers.image.licenses="BSD-2-Clause" \
               .

      - name: Run brew test-bot --only-setup
        run: docker run --rm brew brew test-bot --only-setup

      - name: Deploy the tagged Docker image to GitHub Packages
        if: startsWith(github.ref, 'refs/tags/')
        run: |
          brew_version="${GITHUB_REF:10}"
          echo "brew_version=${brew_version}" >> "${GITHUB_ENV}"
          echo ${{secrets.HOMEBREW_BREW_GITHUB_PACKAGES_TOKEN}} | docker login ghcr.io -u BrewTestBot --password-stdin
          docker tag brew "ghcr.io/homebrew/ubuntu${{matrix.version}}:${brew_version}"
          docker push "ghcr.io/homebrew/ubuntu${{matrix.version}}:${brew_version}"
          docker tag brew "ghcr.io/homebrew/ubuntu${{matrix.version}}:latest"
          docker push "ghcr.io/homebrew/ubuntu${{matrix.version}}:latest"

      - name: Deploy the tagged Docker image to Docker Hub
        if: startsWith(github.ref, 'refs/tags/')
        run: |
          echo ${{secrets.HOMEBREW_BREW_DOCKER_TOKEN}} | docker login -u brewtestbot --password-stdin
          docker tag brew "homebrew/ubuntu${{matrix.version}}:${brew_version}"
          docker push "homebrew/ubuntu${{matrix.version}}:${brew_version}"
          docker tag brew "homebrew/ubuntu${{matrix.version}}:latest"
          docker push "homebrew/ubuntu${{matrix.version}}:latest"

      - name: Deploy the homebrew/brew Docker image to GitHub Packages and Docker Hub
        if: startsWith(github.ref, 'refs/tags/') && matrix.version == '22.04'
        run: |
          docker tag brew "ghcr.io/homebrew/brew:${brew_version}"
          docker push "ghcr.io/homebrew/brew:${brew_version}"
          docker tag brew "ghcr.io/homebrew/brew:latest"
          docker push "ghcr.io/homebrew/brew:latest"
          docker tag brew "homebrew/brew:${brew_version}"
          docker push "homebrew/brew:${brew_version}"
          docker tag brew "homebrew/brew:latest"
          docker push "homebrew/brew:latest"
