name: Docker

on:
  #schedule:
  #  - cron: '0 4 * * *' # everyday at 4:00 AM UTC
  push:
    branches:
      - master
    tags:
      - v*
  pull_request:

jobs:
  build:
    name: Build
    runs-on: ${{ matrix.os }}
    strategy:
      matrix:
        os:
          - ubuntu-latest
        docker_pkg: [debian, alpine]
    steps:
      - name: Checkout
        uses: actions/checkout@v2

      - name: Repo metadata
        id: repo
        uses: actions/github-script@v3
        with:
          script: |
            const repo = await github.repos.get(context.repo)
            return repo.data

      - name: Gather image information
        id: info
        run: |
          DOCKER_IMAGE=ghcr.io/drakkan/sftpgo
          VERSION=noop
          DOCKERFILE=Dockerfile
          if [ "${{ github.event_name }}" = "schedule" ]; then
            VERSION=nightly
          elif [[ $GITHUB_REF == refs/tags/* ]]; then
            VERSION=${GITHUB_REF#refs/tags/}
          elif [[ $GITHUB_REF == refs/heads/* ]]; then
            VERSION=$(echo ${GITHUB_REF#refs/heads/} | sed -r 's#/+#-#g')
            if [ "${{ github.event.repository.default_branch }}" = "$VERSION" ]; then
              VERSION=edge
            fi
          elif [[ $GITHUB_REF == refs/pull/* ]]; then
            VERSION=pr-${{ github.event.number }}
          fi
          if [[ $DOCKER_PKG == alpine ]]; then
            VERSION="$VERSION-alpine"
            DOCKERFILE=Dockerfile.alpine
          fi
          TAGS="${DOCKER_IMAGE}:${VERSION}"
          if [[ $GITHUB_REF == refs/tags/* ]]; then
            if [[ $DOCKER_PKG == debian ]]; then
              TAGS="$TAGS,${DOCKER_IMAGE}:latest"
            else
              TAGS="$TAGS,${DOCKER_IMAGE}:alpine"
            fi
          fi
          echo ::set-output name=dockerfile::${DOCKERFILE}
          echo ::set-output name=version::${VERSION}
          echo ::set-output name=tags::${TAGS}
          echo ::set-output name=created::$(date -u +'%Y-%m-%dT%H:%M:%SZ')
          echo ::set-output name=sha::${GITHUB_SHA::8}
        env:
          DOCKER_PKG: ${{ matrix.docker_pkg }}

      - name: Set up QEMU
        uses: docker/setup-qemu-action@v1

      - name: Set up Docker Buildx
        uses: docker/setup-buildx-action@v1

      - name: Login to GitHub Container Registry
        uses: docker/login-action@v1
        with:
          registry: ghcr.io
          username: ${{ github.repository_owner }}
          password: ${{ secrets.CR_PAT }}
        if: github.event_name != 'pull_request'

      - name: Build and push
        uses: docker/build-push-action@v2
        with:
          file: ./${{ steps.info.outputs.dockerfile }}
          platforms: linux/amd64,linux/arm64
          push: ${{ github.event_name != 'pull_request' }}
          tags: ${{ steps.info.outputs.tags }}
          build-args: |
            COMMIT_SHA=${{ steps.info.outputs.sha }}
          labels: |
            org.opencontainers.image.title=SFTPGo
            org.opencontainers.image.description=Fully featured and highly configurable SFTP server with optional FTP/S and WebDAV support
            org.opencontainers.image.url=${{ fromJson(steps.repo.outputs.result).html_url }}
            org.opencontainers.image.documentation=${{ fromJson(steps.repo.outputs.result).html_url }}/blob/${{ github.sha }}/docker/README.md
            org.opencontainers.image.source=${{ fromJson(steps.repo.outputs.result).clone_url }}
            org.opencontainers.image.version=${{ steps.info.outputs.version }}
            org.opencontainers.image.created=${{ steps.info.outputs.created }}
            org.opencontainers.image.revision=${{ github.sha }}
            org.opencontainers.image.licenses=${{ fromJson(steps.repo.outputs.result).license.spdx_id }}
