# This workflow uses actions that are not certified by GitHub.
# They are provided by a third-party and are governed by
# separate terms of service, privacy policy, and support
# documentation.

name: Publish Docker image

on:
  workflow_run:
    workflows: ["Build"]
    types: [completed]
    branches: [master]
    
env:
  DOCKER_REPOSITORY: ${{ secrets.DOCKER_REPOSITORY || 'geopython/pygeoapi' }}
#  DOCKER_TEST_IMAGE: geopython/pygeoapi:test

jobs:
  on-success:
    name: Build, Test and Push Docker Image to DockerHub
    runs-on: ubuntu-22.04
    if: ${{ github.event.workflow_run.conclusion == 'success' || github.event_name == 'workflow_dispatch' }}
    permissions:
      packages: write
      contents: read
    steps:
      - name: Check out the repo
        uses: actions/checkout@v3

      - name: Set up QEMU
        uses: docker/setup-qemu-action@v2.1.0

      - name: Set up Docker Buildx
        uses: docker/setup-buildx-action@v2.2.1

      - name: Log in to Docker Hub
        uses: docker/login-action@v2.1.0
        with:
          username: ${{ secrets.DOCKER_USERNAME }}
          password: ${{ secrets.DOCKER_PASSWORD }}

      - name: Log in to the Container registry
        uses: docker/login-action@v2.1.0
        with:
          registry: ghcr.io
          username: ${{ github.actor }}
          password: ${{ secrets.GITHUB_TOKEN }}

#      - name: Build and export to Docker
#        uses: docker/build-push-action@v3.1.1
#        with:
#          context: .
#          load: true
#          tags: ${{ env.DOCKER_TEST_IMAGE }}

#      - name: pygeoapi Unit Tests with Docker Image ⚙️
#        run: |
#          docker run --entrypoint "/entrypoint.sh" --rm ${{ env.DOCKER_TEST_IMAGE }} test

      - name: Extract metadata (tags, labels) for Docker
        id: meta
        uses: docker/metadata-action@v4.0.1
        with:
          images: |
            ${{ env.DOCKER_REPOSITORY }}
            ghcr.io/${{ github.repository }}
          tags: |
            type=semver,pattern={{version}}
            type=raw,value=latest,enable=${{ endsWith(github.ref, github.event.repository.default_branch) }}

      - name: Build and push Docker images
        uses: docker/build-push-action@v3.3.0
        with:
          context: .
          push: true
          tags: ${{ steps.meta.outputs.tags }}
          labels: ${{ steps.meta.outputs.labels }}
          cache-from: type=gha
          cache-to: type=gha,mode=max
          platforms: linux/arm64, linux/amd64

  on-failure:
    runs-on: ubuntu-22.04
    if: ${{ github.event.workflow_run.conclusion == 'failure' }}
    steps:
      - name: Print Test Fail
        run: echo Tests Failed
