name: validate # Default to 'contents: read', which grants actions to read commits. # # If any permission is set, any permission not included in the list is # implicitly set to "none". # # see https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#permissions permissions: contents: read concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true on: workflow_dispatch: push: branches: - 'master' - 'v[0-9]*' tags: - 'v*' pull_request: paths-ignore: - '.github/releases.json' 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@v4 - name: Matrix id: matrix uses: actions/github-script@v7 with: script: | let def = {}; await core.group(`Parsing definition`, async () => { const printEnv = Object.assign({}, process.env, { GOLANGCI_LINT_MULTIPLATFORM: process.env.GITHUB_REPOSITORY === 'docker/buildx' ? '1' : '' }); const resPrint = await exec.getExecOutput('docker', ['buildx', 'bake', 'validate', '--print'], { ignoreReturnCode: true, env: printEnv }); if (resPrint.stderr.length > 0 && resPrint.exitCode != 0) { throw new Error(res.stderr); } def = JSON.parse(resPrint.stdout.trim()); }); await core.group(`Generating matrix`, async () => { const includes = []; for (const targetName of Object.keys(def.target)) { const target = def.target[targetName]; if (target.platforms && target.platforms.length > 0) { target.platforms.forEach(platform => { includes.push({ target: targetName, platform: platform }); }); } else { includes.push({ target: targetName }); } } core.info(JSON.stringify(includes, null, 2)); core.setOutput('includes', JSON.stringify(includes)); }); validate: runs-on: ubuntu-24.04 needs: - prepare strategy: fail-fast: false matrix: include: ${{ fromJson(needs.prepare.outputs.includes) }} steps: - name: Prepare run: | if [ "$GITHUB_REPOSITORY" = "docker/buildx" ]; then echo "GOLANGCI_LINT_MULTIPLATFORM=1" >> $GITHUB_ENV fi - 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.platform }}