name: ci

on:
  workflow_dispatch:
  schedule:
    - cron: '0 10 * * *'
  push:
    branches:
      - 'master'
      - 'releases/v*'
    tags:
      - 'v*'
  pull_request:

env:
  DOCKER_VERSION: v23.0.6

jobs:
  main:
    runs-on: ${{ matrix.os }}
    strategy:
      fail-fast: false
      matrix:
        os:
          - ubuntu-latest
          - macos-13
          - macos-latest
          - windows-latest
        version:
          - pinned
          - latest
    steps:
      -
        name: Checkout
        uses: actions/checkout@v4
      -
        name: Set version
        shell: bash
        run: |
          if [ "${{ matrix.version }}" != "pinned" ]; then
            echo "DOCKER_VERSION=${{ matrix.version }}" >> $GITHUB_ENV
          fi
      -
        name: Set up Docker
        uses: ./
        with:
          version: ${{ env.DOCKER_VERSION }}
      -
        name: Dump context
        if: always()
        uses: crazy-max/ghaction-dump-context@v2

  channel:
    runs-on: ${{ matrix.os }}
    strategy:
      fail-fast: false
      matrix:
        os:
          - ubuntu-latest
          - macos-latest
          - windows-latest
    steps:
      -
        name: Checkout
        uses: actions/checkout@v4
      -
        name: Set up Docker
        uses: ./
        with:
          version: v23.0.0-rc.4
          channel: test
      -
        name: Dump context
        if: always()
        uses: crazy-max/ghaction-dump-context@v2

  daemon-config:
    runs-on: ${{ matrix.os }}
    strategy:
      fail-fast: false
      matrix:
        os:
          - ubuntu-latest
          - macos-latest
          - windows-latest
    steps:
      -
        name: Checkout
        uses: actions/checkout@v4
      -
        name: Set up Docker
        uses: ./
        with:
          daemon-config: |
            {
              "debug": true,
              "features": {
                "containerd-snapshotter": true
              }
            }
      -
        name: Dump context
        if: always()
        uses: crazy-max/ghaction-dump-context@v2

  context:
    runs-on: ${{ matrix.os }}
    strategy:
      fail-fast: false
      matrix:
        os:
          - ubuntu-latest
          - macos-latest
          - windows-latest
    steps:
      -
        name: Checkout
        uses: actions/checkout@v4
      -
        name: Set up Docker
        uses: ./
        with:
          version: ${{ env.DOCKER_VERSION }}
          context: foo
      -
        name: Check context
        run: |
          docker context inspect foo
      -
        name: Dump context
        if: always()
        uses: crazy-max/ghaction-dump-context@v2

  lima-start-args:
    runs-on: macos-latest
    steps:
      -
        name: Checkout
        uses: actions/checkout@v4
      -
        name: Set up Docker
        uses: ./
        env:
          LIMA_START_ARGS: --cpus 4 --memory 8

  build-linux:
    runs-on: ubuntu-latest
    steps:
      -
        name: Checkout
        uses: actions/checkout@v4
      -
        name: Set up Docker
        uses: ./
        with:
          version: ${{ env.DOCKER_VERSION }}
      -
        name: Start registry
        run: |
          docker run -d -p 5000:5000 --restart=always --name registry registry:2
      -
        name: Set up Docker Buildx
        uses: docker/setup-buildx-action@v3
        with:
          driver: docker
          driver-opts: network=host
      -
        name: Build and push
        uses: docker/build-push-action@v5
        with:
          context: ./test
          push: true
          tags: |
            localhost:5000/name/app:latest
      -
        name: Inspect
        run: |
          docker buildx imagetools inspect localhost:5000/name/app:latest --format '{{json .}}'
      -
        name: Dump context
        if: always()
        uses: crazy-max/ghaction-dump-context@v2

  build-macos:
    runs-on: ${{ matrix.os }}
    strategy:
      fail-fast: false
      matrix:
        os:
          - macos-13
          - macos-latest
    steps:
      -
        name: Checkout
        uses: actions/checkout@v4
      -
        name: Set up Docker
        uses: ./
        with:
          version: ${{ env.DOCKER_VERSION }}
      -
        name: Start registry
        run: |
          docker run -d -p 5000:5000 --restart=always --name registry registry:2
      -
        name: Set up Docker Buildx
        uses: docker/setup-buildx-action@v3
        with:
          driver: docker
          driver-opts: network=host
      -
        name: Build and push
        uses: docker/build-push-action@v5
        with:
          context: ./test
          push: true
          tags: |
            localhost:5000/name/app:latest
      -
        name: Inspect
        run: |
          docker buildx imagetools inspect localhost:5000/name/app:latest --format '{{json .}}'
      -
        name: Dump context
        if: always()
        uses: crazy-max/ghaction-dump-context@v2

  build-windows:
    runs-on: windows-latest
    steps:
      -
        name: Checkout
        uses: actions/checkout@v4
      -
        name: Set up Docker
        uses: ./
        with:
          version: ${{ env.DOCKER_VERSION }}
      -
        name: Build
        working-directory: ./test
        run: |
          docker build -f win.Dockerfile -t test .
      -
        name: Inspect
        run: |
          docker image inspect test
      -
        name: Dump context
        if: always()
        uses: crazy-max/ghaction-dump-context@v2
