name: e2e

on:
  workflow_dispatch:
    inputs:
      buildx-version:
        description: 'Buildx version or Git context'
        default: 'latest'
        required: false
      buildkit-image:
        description: 'BuildKit image'
        default: 'moby/buildkit:buildx-stable-1'
        required: false
  schedule:
    - cron: '0 10 * * *'
  push:
    branches:
      - 'master'
    tags:
      - v*

env:
  BUILDX_VERSION: latest
  BUILDKIT_IMAGE: moby/buildkit:buildx-stable-1

jobs:
  docker:
    runs-on: ubuntu-latest
    strategy:
      fail-fast: false
      matrix:
        include:
          -
            registry: ''
            slug: ghactionstest/ghactionstest
            username_secret: DOCKERHUB_USERNAME
            password_secret: DOCKERHUB_TOKEN
          -
            registry: ghcr.io
            slug: ghcr.io/docker-ghactiontest/test
            username_secret: GHCR_USERNAME
            password_secret: GHCR_PAT
          -
            registry: registry.gitlab.com
            slug: registry.gitlab.com/test1716/test
            username_secret: GITLAB_USERNAME
            password_secret: GITLAB_TOKEN
          -
            registry: 175142243308.dkr.ecr.us-east-2.amazonaws.com
            slug: 175142243308.dkr.ecr.us-east-2.amazonaws.com/sandbox/test-docker-action
            username_secret: AWS_ACCESS_KEY_ID
            password_secret: AWS_SECRET_ACCESS_KEY
          -
            registry: public.ecr.aws
            slug: public.ecr.aws/q3b5f1u4/test-docker-action
            username_secret: AWS_ACCESS_KEY_ID
            password_secret: AWS_SECRET_ACCESS_KEY
          -
            registry: us-east4-docker.pkg.dev
            slug: us-east4-docker.pkg.dev/sandbox-298914/docker-official-github-actions/test-docker-action
            username_secret: GAR_USERNAME
            password_secret: GAR_JSON_KEY
          -
            registry: gcr.io
            slug: gcr.io/sandbox-298914/test-docker-action
            username_secret: GCR_USERNAME
            password_secret: GCR_JSON_KEY
          -
            registry: officialgithubactions.azurecr.io
            slug: officialgithubactions.azurecr.io/test-docker-action
            username_secret: AZURE_CLIENT_ID
            password_secret: AZURE_CLIENT_SECRET
    steps:
      -
        name: Checkout
        uses: actions/checkout@v3
      -
        name: Docker meta
        id: meta
        uses: docker/metadata-action@v4
        with:
          images: ${{ matrix.slug }}
      -
        name: Set up QEMU
        uses: docker/setup-qemu-action@v2
      -
        name: Set up Docker Buildx
        uses: docker/setup-buildx-action@v2
        with:
          version: ${{ inputs.buildx-version || env.BUILDX_VERSION }}
          driver-opts: |
            image=${{ inputs.buildkit-image || env.BUILDKIT_IMAGE }}
      -
        name: Login to Registry
        if: github.event_name != 'pull_request'
        uses: docker/login-action@v2
        with:
          registry: ${{ matrix.registry }}
          username: ${{ secrets[matrix.username_secret] }}
          password: ${{ secrets[matrix.password_secret] }}
      -
        name: Build and push
        uses: ./
        with:
          context: ./test
          file: ./test/multi.Dockerfile
          platforms: linux/386,linux/amd64,linux/arm/v6,linux/arm/v7,linux/arm64,linux/ppc64le,linux/s390x
          push: ${{ github.event_name != 'pull_request' }}
          tags: ${{ steps.meta.outputs.tags }}
          labels: ${{ steps.meta.outputs.labels }}
          cache-from: type=registry,ref=${{ matrix.slug }}:master
          cache-to: type=inline
      -
        name: Inspect image
        if: github.event_name != 'pull_request'
        run: |
          docker pull ${{ matrix.slug }}:${{ steps.meta.outputs.version }}
          docker image inspect ${{ matrix.slug }}:${{ steps.meta.outputs.version }}
      -
        name: Check manifest
        if: github.event_name != 'pull_request'
        run: |
          docker buildx imagetools inspect ${{ matrix.slug }}:${{ steps.meta.outputs.version }} --format '{{json .}}'
