name: validate

concurrency:
  group: ${{ github.workflow }}-${{ github.ref }}
  cancel-in-progress: true

# https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#permissions
permissions:
  contents: read

on:
  workflow_dispatch:
  push:
    branches:
      - 'master'
      - 'v[0-9]+.[0-9]+'
    tags:
      - 'v*'
      - 'dockerfile/*'
  pull_request:

env:
  SETUP_BUILDX_VERSION: "edge"
  SETUP_BUILDKIT_IMAGE: "moby/buildkit:latest"

jobs:
  prepare:
    runs-on: ubuntu-24.04
    outputs:
      includes: ${{ steps.matrix.outputs.includes }}
    steps:
      -
        name: Checkout
        uses: actions/checkout@v5
      -
        name: Generate matrix
        id: generate
        uses: docker/bake-action/subaction/matrix@v6
        with:
          target: validate
          fields: platforms
        env:
          GOLANGCI_LINT_MULTIPLATFORM: ${{ github.repository == 'moby/buildkit' && '1' || '' }}
          ARCHUTIL_MULTIPLATFORM: ${{ github.repository == 'moby/buildkit' && '1' || '' }}
      -
        name: Add runner to matrix
        id: matrix
        uses: actions/github-script@v8
        env:
          INPUT_MATRIX: ${{ steps.generate.outputs.matrix }}
          INPUT_PRIVATE-REPO: ${{ github.event.repository.private }}
        with:
          script: |
            const matrix = JSON.parse(core.getInput('matrix'));
            const privateRepo = core.getBooleanInput('private-repo');
            matrix.forEach(job => {
              if (job.platforms && job.platforms.startsWith('linux/arm') && !privateRepo) {
                job.runner = 'ubuntu-24.04-arm';
              } else {
                job.runner = 'ubuntu-24.04';
              }
            });
            core.info(JSON.stringify(matrix, null, 2));
            core.setOutput('includes', JSON.stringify(matrix));

  validate:
    runs-on: ${{ matrix.runner }}
    needs:
      - prepare
    strategy:
      fail-fast: false
      matrix:
        include: ${{ fromJson(needs.prepare.outputs.includes) }}
    steps:
      -
        name: Set up Docker Buildx
        uses: docker/setup-buildx-action@v3
        with:
          version: ${{ env.SETUP_BUILDX_VERSION }}
          driver-opts: image=${{ env.SETUP_BUILDKIT_IMAGE }}
          buildkitd-flags: --debug
      -
        name: Validate
        uses: docker/bake-action@v6
        with:
          targets: ${{ matrix.target }}
          set: |
            *.platform=${{ matrix.platforms }}
