name: ci

on:
  push:
    branches:
      - master
      - releases/v*
    paths-ignore:
      - "**.md"
  pull_request:
    branches:
      - master
      - releases/v*
    paths-ignore:
      - "**.md"

jobs:
  main:
    runs-on: ubuntu-latest
    strategy:
      fail-fast: false
      matrix:
        buildx-version:
          - latest
          - v0.2.2
          - ""
    steps:
      -
        name: Checkout
        uses: actions/checkout@v2.3.3
      -
        name: Set up Docker Buildx
        id: buildx
        uses: ./
        with:
          version: ${{ matrix.buildx-version }}
      -
        name: Builder instance name
        run: echo ${{ steps.buildx.outputs.name }}
      -
        name: Available platforms
        run: echo ${{ steps.buildx.outputs.platforms }}
      -
        name: Dump context
        uses: crazy-max/ghaction-dump-context@v1

  multi:
    runs-on: ubuntu-latest
    steps:
      -
        name: Checkout
        uses: actions/checkout@v2.3.3
      -
        name: Set up Docker Buildx 1
        id: buildx1
        uses: ./
      -
        name: Builder 1 instance name
        run: echo ${{ steps.buildx1.outputs.name }}
      -
        name: Set up Docker Buildx 2
        id: buildx2
        uses: ./
      -
        name: Builder 2 instance name
        run: echo ${{ steps.buildx2.outputs.name }}

  install:
    runs-on: ubuntu-latest
    steps:
      -
        name: Checkout
        uses: actions/checkout@v2.3.3
      -
        name: Set up Docker Buildx
        uses: ./
        with:
          install: true
      -
        name: Check cmd
        run: |
          docker build --help

  use:
    runs-on: ubuntu-latest
    strategy:
      fail-fast: false
      matrix:
        use:
          - true
          - false
    steps:
      -
        name: Checkout
        uses: actions/checkout@v2.3.3
      -
        name: Set up Docker Buildx
        uses: ./
        with:
          use: ${{ matrix.use }}
      -
        name: List builder instances
        run: docker buildx ls

  driver:
    runs-on: ubuntu-latest
    strategy:
      fail-fast: false
      matrix:
        driver-opts:
          - image=moby/buildkit:latest
          - |
            image=moby/buildkit:master
            network=host
    steps:
      -
        name: Checkout
        uses: actions/checkout@v2.3.3
      -
        name: Set up Docker Buildx
        uses: ./
        with:
          driver: docker-container
          driver-opts: ${{ matrix.driver-opts }}

  docker-driver:
    runs-on: ubuntu-latest
    steps:
      -
        name: Checkout
        uses: actions/checkout@v2.3.3
      -
        name: Set up Docker Buildx
        uses: ./
        id: builder
        with:
          driver: docker
      -
        name: Verify
        run: |
          [[ "${{ steps.builder.outputs.name }}" = "default" ]]
          docker buildx inspect
          docker buildx inspect | grep Driver | grep docker
          docker buildx inspect | grep Status | grep running

  endpoint:
    runs-on: ubuntu-latest
    services:
      dind:
        image: docker:dind
        options: >-
          --privileged
          --health-cmd "docker info"
          --health-interval 10s
          --health-timeout 5s
          --health-retries 5
        env:
          DOCKER_TLS_CERTDIR: ""
        ports:
          - 2375:2375
    steps:
      -
        name: Checkout
        uses: actions/checkout@v2.3.3
      -
        name: Create context
        run: |
          docker context create mycontext --docker host=tcp://127.0.0.1:2375
      -
        name: Check context
        run: |
          docker --context mycontext info
      -
        name: Set up Docker Buildx
        uses: ./
        with:
          endpoint: mycontext

  with-qemu:
    runs-on: ubuntu-latest
    strategy:
      fail-fast: false
      matrix:
        buildx-version:
          - latest
          - v0.2.2
          - ""
        qemu-platforms:
          - all
          - arm64,riscv64,arm
    steps:
      -
        name: Checkout
        uses: actions/checkout@v2.3.3
      -
        name: Set up QEMU
        uses: docker/setup-qemu-action@v1
        with:
          platforms: ${{ matrix.qemu-platforms }}
      -
        name: Set up Docker Buildx
        id: buildx
        uses: ./
        with:
          version: ${{ matrix.buildx-version }}
      -
        name: Available platforms
        run: echo ${{ steps.buildx.outputs.platforms }}
      -
        name: Builder instance name
        run: echo ${{ steps.buildx.outputs.name }}