name: ci

on:
  schedule:
    - cron: '0 */4 * * *' # every 4 hours
  push:
    branches:
      - '**'
    tags:
      - 'v*.*.*'
  pull_request:

env:
  DOCKER_IMAGE: localhost:5000/name/app

jobs:
  multi-images:
    runs-on: ubuntu-latest
    steps:
      -
        name: Checkout
        uses: actions/checkout@v2
      -
        name: Docker meta
        uses: ./
        with:
          images: |
            ${{ env.DOCKER_IMAGE }}
            ghcr.io/name/app
          tag-sha: true

  tag-schedule:
    runs-on: ubuntu-latest
    strategy:
      fail-fast: false
      matrix:
        tag-schedule:
          - ""
          - "cron-{{date 'YYYYMMDD'}}"
          - "{{date 'YYYYMMDD-HHmmss'}}"
          - "schedule"
    steps:
      -
        name: Checkout
        uses: actions/checkout@v2
      -
        name: Docker meta
        uses: ./
        with:
          images: |
            ${{ env.DOCKER_IMAGE }}
            ghcr.io/name/app
          tag-sha: true
          tag-schedule: ${{ matrix.tag-schedule }}

  tag-match:
    runs-on: ubuntu-latest
    strategy:
      fail-fast: false
      matrix:
        include:
          - tag-match: '\d{1,3}.\d{1,3}.\d{1,3}'
            tag-match-group: '0'
          - tag-match: '\d{1,3}.\d{1,3}'
            tag-match-group: '0'
          - tag-match: 'v(.*)'
            tag-match-group: '1'
    steps:
      -
        name: Checkout
        uses: actions/checkout@v2
      -
        name: Docker meta
        uses: ./
        with:
          images: |
            ${{ env.DOCKER_IMAGE }}
            ghcr.io/name/app
          tag-sha: true
          tag-match: ${{ matrix.tag-match }}
          tag-match-group: ${{ matrix.tag-match-group }}

  tag-semver:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v2
      - name: Docker meta
        uses: ./
        with:
          images: |
            ${{ env.DOCKER_IMAGE }}
            ghcr.io/name/app
          tag-semver: |
            {{raw}}
            {{version}}
            {{major}}.{{minor}}.{{patch}}

  docker-push:
    runs-on: ubuntu-latest
    services:
      registry:
        image: registry:2
        ports:
          - 5000:5000
    steps:
      -
        name: Checkout
        uses: actions/checkout@v2
      -
        name: Docker meta
        id: docker_meta
        uses: ./
        with:
          images: ${{ env.DOCKER_IMAGE }}
          tag-sha: true
          tag-match: '\d{1,3}.\d{1,3}.\d{1,3}'
      -
        name: Set up QEMU
        uses: docker/setup-qemu-action@v1
      -
        name: Set up Docker Buildx
        uses: docker/setup-buildx-action@v1
        with:
          driver-opts: network=host
      -
        name: Build and push to local registry
        uses: docker/build-push-action@v2
        with:
          context: ./test
          file: ./test/Dockerfile
          platforms: linux/amd64,linux/arm64,linux/386
          push: true
          tags: ${{ steps.docker_meta.outputs.tags }}
          labels: ${{ steps.docker_meta.outputs.labels }}
      -
        name: Inspect image
        run: |
          docker pull ${{ env.DOCKER_IMAGE }}:${{ steps.docker_meta.outputs.version }}
          docker image inspect ${{ env.DOCKER_IMAGE }}:${{ steps.docker_meta.outputs.version }}
      -
        name: Check manifest
        run: |
          docker buildx imagetools inspect ${{ env.DOCKER_IMAGE }}:${{ steps.docker_meta.outputs.version }}
      -
        name: Dump context
        if: always()
        uses: crazy-max/ghaction-dump-context@v1