name: docker

on:
  push:
    branches: [master]
    paths-ignore:
      - '.github/**'
      - '.vscode/**'
      - 'chrome-extension/**'
      - 'releases/**'
      - '**/**.md'
      - '**.crx'
      - '**.pem'
      - '.dockerignore'
      - '.gitignore'
  schedule:
    - cron:  '34 4 * * 2'
  workflow_dispatch:

jobs:
  build-and-push:
    runs-on: ubuntu-latest
    steps:
      - name: checkout code
        uses: actions/checkout@v2

      - name: Set hash
        id: vars
        run: echo "::set-output name=sha_short::$(git rev-parse --short HEAD)"

      - name: Get current date
        id: date
        run: echo "::set-output name=date::$(date +'%Y-%m-%d')"

      - name: create-json
        id: create-json
        uses: jsdaniell/create-json@v1.2.2
        with:
          name: "version.json"
          json: '{"type": "docker", "tag": "${{secrets.DOCKERHUB_MASTER_TAG}}", "commit": "${{ steps.vars.outputs.sha_short }}", "date": "${{ steps.date.outputs.date }}"}'
          dir: 'backend/'

      - name: setup platform emulator
        uses: docker/setup-qemu-action@v1

      - name: setup multi-arch docker build
        uses: docker/setup-buildx-action@v2

      - name: Generate Docker image metadata
        id: docker-meta
        uses: docker/metadata-action@v4
        # Defaults:
        #     DOCKERHUB_USERNAME  : tzahi12345
        #     DOCKERHUB_REPO      : youtubedl-material
        #     DOCKERHUB_MASTER_TAG: nightly
        with:
          images: |
            ${{ secrets.DOCKERHUB_USERNAME }}/${{ secrets.DOCKERHUB_REPO }}
            ghcr.io/${{ github.repository_owner }}/${{ secrets.DOCKERHUB_REPO }}
          tags: |
            type=raw,${{secrets.DOCKERHUB_MASTER_TAG}}-{{ date 'YYYY-MM-DD' }}
            type=raw,${{secrets.DOCKERHUB_MASTER_TAG}}
            type=sha,prefix=sha-,format=short

      - name: Login to DockerHub
        uses: docker/login-action@v2
        with:
          username: ${{ secrets.DOCKERHUB_USERNAME }}
          password: ${{ secrets.DOCKERHUB_TOKEN }}

      - name: Login to GitHub Container Registry
        uses: docker/login-action@v2
        with:
          registry: ghcr.io
          username: ${{ github.repository_owner }}
          password: ${{ secrets.GITHUB_TOKEN }}

      - name: build & push images
        uses: docker/build-push-action@v2
        with:
          context: .
          file: ./Dockerfile
          platforms: linux/amd64,linux/arm64/v8
          push: true
          tags: ${{ steps.docker-meta.outputs.tags }}
          labels: ${{ steps.docker-meta.outputs.labels }}
