name: docker-ci

on:
  push:
    tags:        
      - "v*"

jobs:
  docker-ci:
    runs-on: ubuntu-20.04
    steps:

      - name: Checkout
        uses: actions/checkout@v2

      - name: Generate build-args
        id: build-args
        run: |
          # Declare vars for internal use
          VERSION=$(git describe --abbrev=0 --tags)
          GIT_HEAD_COMMIT=$(git rev-parse --short HEAD)
          GIT_TAG_COMMIT=$(git rev-parse --short $VERSION)
          GIT_MODIFIED_1=$(git diff $GIT_HEAD_COMMIT $GIT_TAG_COMMIT --quiet && echo "" || echo ".dev")
          GIT_MODIFIED_2=$(git diff --quiet && echo "" || echo ".dirty")
          # Export to GH_ENV
          echo "GIT_LAST_TAG=$VERSION" >> $GITHUB_ENV
          echo "GIT_HEAD_COMMIT=$GIT_HEAD_COMMIT" >> $GITHUB_ENV
          echo "GIT_TAG_COMMIT=$GIT_TAG_COMMIT" >> $GITHUB_ENV
          echo "GIT_MODIFIED=$(echo "$GIT_MODIFIED_1""$GIT_MODIFIED_2")" >> $GITHUB_ENV
          echo "GIT_REPO=$(git config --get remote.origin.url)" >> $GITHUB_ENV
          echo "BUILD_DATE=$(git log -1 --format="%at" | xargs -I{} date -d @{} +%Y-%m-%dT%H:%M:%S)" >> $GITHUB_ENV

      - name: Docker meta
        id: meta
        uses: docker/metadata-action@v3
        with:
          images: |
             quay.io/${{ github.repository }}
             docker.io/${{ github.repository }}
          tags: |
            type=semver,pattern={{raw}}
          flavor: |
            latest=false

      - name: Set up QEMU
        id: qemu
        uses: docker/setup-qemu-action@v1
        with:
          platforms: arm64,arm

      - name: Set up Docker Buildx
        id: buildx
        uses: docker/setup-buildx-action@v1
        with:
          install: true

      - name: Inspect builder
        run: |
          echo "Name:      ${{ steps.buildx.outputs.name }}"
          echo "Endpoint:  ${{ steps.buildx.outputs.endpoint }}"
          echo "Status:    ${{ steps.buildx.outputs.status }}"
          echo "Flags:     ${{ steps.buildx.outputs.flags }}"
          echo "Platforms: ${{ steps.buildx.outputs.platforms }}"

      - name: Login to quay.io Container Registry
        uses: docker/login-action@v1 
        with:
          registry: quay.io
          username: ${{ github.repository_owner }}+github
          password: ${{ secrets.BOT_QUAY_IO }}

      - name: Login to docker.io Container Registry
        uses: docker/login-action@v1 
        with:
          registry: docker.io
          username: ${{ secrets.USER_DOCKER_IO }}
          password: ${{ secrets.BOT_DOCKER_IO }}

      - name: Build and push
        id: build-release
        uses: docker/build-push-action@v2
        with:
          file: Dockerfile
          context: .
          platforms: linux/amd64,linux/arm64,linux/arm
          push: true
          tags: ${{ steps.meta.outputs.tags }}
          build-args: |
            GIT_HEAD_COMMIT=${{ env.GIT_HEAD_COMMIT }}
            GIT_TAG_COMMIT=${{ env.GIT_TAG_COMMIT }}
            GIT_REPO=${{ env.GIT_REPO }}
            GIT_LAST_TAG=${{ env.GIT_LAST_TAG }}
            GIT_MODIFIED=${{ env.GIT_MODIFIED }}
            BUILD_DATE=${{ env.BUILD_DATE }}

      - name: Image digest
        run: echo ${{ steps.build-release.outputs.digest }}
