From 68cf998b487c604a3bb1c7003a4746878499407f Mon Sep 17 00:00:00 2001 From: CrazyMax <1951866+crazy-max@users.noreply.github.com> Date: Sun, 6 Jul 2025 02:23:32 +0200 Subject: [PATCH 1/3] matrix subaction Signed-off-by: CrazyMax <1951866+crazy-max@users.noreply.github.com> --- .github/subaction-matrix.png | Bin 0 -> 11869 bytes .github/workflows/ci-subaction.yml | 95 +++++++-------- README.md | 4 +- subaction/matrix/README.md | 140 +++++++++++++++++++++++ subaction/matrix/action.yml | 101 ++++++++++++++++ test/group-with-platform/docker-bake.hcl | 36 ++++++ 6 files changed, 322 insertions(+), 54 deletions(-) create mode 100644 .github/subaction-matrix.png create mode 100644 subaction/matrix/README.md create mode 100644 subaction/matrix/action.yml create mode 100644 test/group-with-platform/docker-bake.hcl diff --git a/.github/subaction-matrix.png b/.github/subaction-matrix.png new file mode 100644 index 0000000000000000000000000000000000000000..4a67d9edeb668c51f2f2ce9d1a2e7a42128b6376 GIT binary patch literal 11869 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 literal 0 HcmV?d00001 diff --git a/.github/workflows/ci-subaction.yml b/.github/workflows/ci-subaction.yml index ebd7028..6274352 100644 --- a/.github/workflows/ci-subaction.yml +++ b/.github/workflows/ci-subaction.yml @@ -25,8 +25,22 @@ on: - 'test/**' jobs: - list-targets-group: + list-targets: runs-on: ubuntu-latest + strategy: + fail-fast: false + matrix: + include: + - + testdir: group + - + testdir: group-matrix + target: validate + - + testdir: multi-files + files: | + docker-bake.json + docker-bake.hcl steps: - name: Checkout @@ -36,20 +50,32 @@ jobs: id: gen uses: ./subaction/list-targets with: - workdir: ./test/group - - - name: Check targets - uses: actions/github-script@v7 - with: - script: | - const targets = `${{ steps.gen.outputs.targets }}`; - if (!targets) { - core.setFailed('No targets generated'); - } - core.info(`targets=${targets}`); + workdir: ./test/${{ matrix.testdir }} + files: ${{ matrix.files }} + target: ${{ matrix.target }} - list-targets-group-matrix: + matrix: runs-on: ubuntu-latest + strategy: + fail-fast: false + matrix: + include: + - + testdir: group + - + testdir: group-matrix + target: validate + - + testdir: group-with-platform + target: validate + - + testdir: group-with-platform + target: validate + fields: platforms + - + testdir: group-with-platform + target: validate + fields: platforms,dockerfile steps: - name: Checkout @@ -57,43 +83,8 @@ jobs: - name: Matrix gen id: gen - uses: ./subaction/list-targets + uses: ./subaction/matrix with: - workdir: ./test/group-matrix - target: validate - - - name: Check targets - uses: actions/github-script@v7 - with: - script: | - const targets = `${{ steps.gen.outputs.targets }}`; - if (!targets) { - core.setFailed('No targets generated'); - } - core.info(`targets=${targets}`); - - list-targets-multi-files: - runs-on: ubuntu-latest - steps: - - - name: Checkout - uses: actions/checkout@v5 - - - name: Matrix gen - id: gen - uses: ./subaction/list-targets - with: - workdir: ./test/multi-files - files: | - docker-bake.json - docker-bake.hcl - - - name: Check targets - uses: actions/github-script@v7 - with: - script: | - const targets = `${{ steps.gen.outputs.targets }}`; - if (!targets) { - core.setFailed('No targets generated'); - } - core.info(`targets=${targets}`); + workdir: ./test/${{ matrix.testdir }} + target: ${{ matrix.target }} + fields: ${{ matrix.fields }} diff --git a/README.md b/README.md index 10fc84a..cb03aa7 100644 --- a/README.md +++ b/README.md @@ -22,7 +22,7 @@ ___ * [outputs](#outputs) * [environment variables](#environment-variables) * [Subactions](#subactions) - * [`list-targets`](subaction/list-targets) + * [`matrix`](subaction/matrix) * [Contributing](#contributing) ## Usage @@ -234,7 +234,7 @@ The following outputs are available ## Subactions -* [`list-targets`](subaction/list-targets) +* [`matrix`](subaction/matrix) ## Contributing diff --git a/subaction/matrix/README.md b/subaction/matrix/README.md new file mode 100644 index 0000000..a84d9a3 --- /dev/null +++ b/subaction/matrix/README.md @@ -0,0 +1,140 @@ +## About + +This subaction generates a multi-dimension matrix that can be used in a [GitHub matrix](https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstrategymatrix) +through the [`include` property](https://docs.github.com/en/actions/how-tos/writing-workflows/choosing-what-your-workflow-does/running-variations-of-jobs-in-a-workflow#expanding-or-adding-matrix-configurations) +so you can distribute your builds across multiple runners. + +![Screenshot](../../.github/subaction-matrix.png) + +___ + +* [Usage](#usage) +* [Customizing](#customizing) + * [inputs](#inputs) + * [outputs](#outputs) + +## Usage + +### List targets + +```hcl +# docker-bake.hcl +group "validate" { + targets = ["lint", "doctoc"] +} + +target "lint" { + target = "lint" +} + +target "doctoc" { + target = "doctoc" +} +``` + +```yaml +jobs: + prepare: + runs-on: ubuntu-latest + outputs: + matrix: ${{ steps.generate.outputs.matrix }} + steps: + - + name: Checkout + uses: actions/checkout@v4 + - + name: Generate matrix + id: generate + uses: docker/bake-action/subaction/matrix@v6 + with: + target: validate + + validate: + runs-on: ubuntu-latest + needs: + - prepare + strategy: + fail-fast: false + matrix: + include: ${{ fromJson(needs.prepare.outputs.matrix) }} + steps: + - + name: Validate + uses: docker/bake-action@v6 + with: + targets: ${{ matrix.target }} +``` + +### Platforms split + +```hcl +# docker-bake.hcl +target "lint" { + dockerfile = "./hack/dockerfiles/lint.Dockerfile" + output = ["type=cacheonly"] + platforms = [ + "darwin/amd64", + "darwin/arm64", + "linux/amd64", + "linux/arm64", + "linux/s390x", + "linux/ppc64le", + "linux/riscv64", + "windows/amd64", + "windows/arm64" + ] +} +``` + +```yaml +jobs: + prepare: + runs-on: ubuntu-latest + outputs: + matrix: ${{ steps.generate.outputs.matrix }} + steps: + - + name: Checkout + uses: actions/checkout@v4 + - + name: Generate matrix + id: generate + uses: docker/bake-action/subaction/matrix@v6 + with: + target: lint + fields: platforms + + lint: + runs-on: ${{ startsWith(matrix.platforms, 'linux/arm') && 'ubuntu-24.04-arm' || 'ubuntu-latest' }} + needs: + - prepare + strategy: + fail-fast: false + matrix: + include: ${{ fromJson(needs.prepare.outputs.matrix) }} + steps: + - + name: Lint + uses: docker/bake-action@v6 + with: + targets: ${{ matrix.target }} + set: | + *.platform=${{ matrix.platforms }} +``` + +## Customizing + +### inputs + +| Name | Type | Description | +|-----------|----------|------------------------------------------------------------------------------------------------| +| `workdir` | String | Working directory to use (defaults to `.`) | +| `files` | List/CSV | List of [bake definition files](https://docs.docker.com/build/customize/bake/file-definition/) | +| `target` | String | The target to use within the bake file | +| `fields` | String | List of extra fields to include in the matrix | + +### outputs + +| Name | Type | Description | +|----------|------|----------------------| +| `matrix` | JSON | Matrix configuration | diff --git a/subaction/matrix/action.yml b/subaction/matrix/action.yml new file mode 100644 index 0000000..32b2000 --- /dev/null +++ b/subaction/matrix/action.yml @@ -0,0 +1,101 @@ +# https://docs.github.com/en/actions/creating-actions/metadata-syntax-for-github-actions +name: 'Matrix' +description: 'Generate a matrix from a Bake definition to help distributing builds in your workflow' + +inputs: + workdir: + description: Working directory + default: '.' + required: false + files: + description: List of Bake files + required: false + target: + description: Bake target + required: false + fields: + description: List of extra fields to include in the matrix + required: false + +outputs: + matrix: + description: Matrix configuration + value: ${{ steps.generate.outputs.includes }} + +runs: + using: composite + steps: + - + name: Generate + id: generate + uses: actions/github-script@v7 + env: + INPUT_WORKDIR: ${{ inputs.workdir }} + INPUT_FILES: ${{ inputs.files }} + INPUT_TARGET: ${{ inputs.target }} + INPUT_FIELDS: ${{ inputs.fields }} + with: + script: | + function getInputList(name) { + return core.getInput(name) ? core.getInput(name).split(/[\r?\n,]+/).filter(x => x !== '') : []; + } + + const workdir = core.getInput('workdir'); + const files = getInputList('files'); + const target = core.getInput('target'); + const fields = getInputList('fields'); + + let def = {}; + await core.group(`Parsing definition`, async () => { + let args = ['buildx', 'bake']; + for (const file of files) { + args.push('--file', file); + } + if (target) { + args.push(target); + } + args.push('--print'); + const res = await exec.getExecOutput('docker', args, { + ignoreReturnCode: true, + silent: true, + cwd: workdir + }); + if (res.stderr.length > 0 && res.exitCode != 0) { + throw new Error(res.stderr); + } + def = JSON.parse(res.stdout.trim()); + core.info(JSON.stringify(def, null, 2)); + }); + + await core.group(`Generating matrix`, async () => { + const result = []; + for (const targetName of Object.keys(def.target)) { + const target = def.target[targetName]; + const entry = { target: targetName }; + if (fields.length === 0) { + result.push({ ...entry }); + continue; + } + let fieldFound = false; + Object.keys(target).forEach(field => { + if (fields.includes(field)) { + fieldFound = true; + const value = target[field]; + if (Array.isArray(value)) { + value.forEach((v) => { + entry[field] = v; + result.push({ ...entry }); + }); + } else { + entry[field] = value; + result.push({ ...entry }); + } + } + }); + if (!fieldFound) { + result.push({ ...entry }); + } + } + core.info(JSON.stringify(result, null, 2)); + core.setOutput('includes', JSON.stringify(result)); + }); diff --git a/test/group-with-platform/docker-bake.hcl b/test/group-with-platform/docker-bake.hcl new file mode 100644 index 0000000..bfba830 --- /dev/null +++ b/test/group-with-platform/docker-bake.hcl @@ -0,0 +1,36 @@ +group "validate" { + targets = ["lint", "lint-gopls", "validate-vendor", "validate-docs"] +} + +target "lint" { + dockerfile = "./hack/dockerfiles/lint.Dockerfile" + output = ["type=cacheonly"] + platforms = [ + "darwin/amd64", + "darwin/arm64", + "linux/amd64", + "linux/arm64", + "linux/s390x", + "linux/ppc64le", + "linux/riscv64", + "windows/amd64", + "windows/arm64" + ] +} + +target "lint-gopls" { + inherits = ["lint"] + target = "gopls-analyze" +} + +target "validate-vendor" { + dockerfile = "./hack/dockerfiles/vendor.Dockerfile" + target = "validate" + output = ["type=cacheonly"] +} + +target "validate-docs" { + dockerfile = "./hack/dockerfiles/docs.Dockerfile" + target = "validate" + output = ["type=cacheonly"] +} From 1d0c0ffa52646c33a48e224f0117982e5299c7fc Mon Sep 17 00:00:00 2001 From: CrazyMax <1951866+crazy-max@users.noreply.github.com> Date: Sun, 6 Jul 2025 10:59:18 +0200 Subject: [PATCH 2/3] list-targets: deprecation notice Signed-off-by: CrazyMax <1951866+crazy-max@users.noreply.github.com> --- .github/subaction-list-targets.png | Bin 12788 -> 8273 bytes subaction/list-targets/README.md | 16 +++++++++------- subaction/list-targets/action.yml | 20 ++++++-------------- 3 files changed, 15 insertions(+), 21 deletions(-) diff --git a/.github/subaction-list-targets.png b/.github/subaction-list-targets.png index b0a008654158fa7ec67693153090053d89f2333d..f6e82db39899c647f8a83f1cb15681d5df730b1c 100644 GIT binary patch literal 8273 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 literal 12788 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 [!WARNING] +> `docker/bake-action/subaction/list-targets` is deprecated and will be removed +> in a future release. Please use [`docker/bake-action/subaction/matrix`](../matrix) +> instead. + ## About This subaction generates a list of Bake targets that can be used in a [GitHub matrix](https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstrategymatrix), so you can distribute your builds across multiple runners. -![Screenshot](../../.github/bake-action.png) +![Screenshot](../../.github/subaction-list-targets.png) ___ @@ -55,9 +60,6 @@ jobs: matrix: target: ${{ fromJson(needs.prepare.outputs.targets) }} steps: - - - name: Checkout - uses: actions/checkout@v4 - name: Validate uses: docker/bake-action@v6 @@ -79,6 +81,6 @@ jobs: The following outputs are available -| Name | Type | Description | -|------------|----------|----------------------------| -| `targets` | List/CSV | List of extracted targest | +| Name | Type | Description | +|------------|----------|---------------------------| +| `targets` | List/CSV | List of extracted targets | diff --git a/subaction/list-targets/action.yml b/subaction/list-targets/action.yml index 9613b09..e4ef2d3 100644 --- a/subaction/list-targets/action.yml +++ b/subaction/list-targets/action.yml @@ -22,18 +22,6 @@ outputs: runs: using: composite steps: - - - name: Install npm dependencies - uses: actions/github-script@v7 - env: - INPUT_ACTIONS-TOOLKIT-VERSION: '0.62.1' - with: - script: | - const version = core.getInput('actions-toolkit-version') || 'latest'; - const dep = `@docker/actions-toolkit@${version}`; - await core.group(`Installing ${dep}`, async () => { - await exec.exec('npm', ['install', dep]); - }); - name: Generate id: generate @@ -44,10 +32,14 @@ runs: INPUT_TARGET: ${{ inputs.target }} with: script: | - const { Util } = require('@docker/actions-toolkit/lib/util'); + core.warning(`docker/bake-action/subaction/list-targets is deprecated and will be removed in a future release. Please use docker/bake-action/subaction/matrix instead.`); + + function getInputList(name) { + return core.getInput(name) ? core.getInput(name).split(/[\r?\n,]+/).filter(x => x !== '') : []; + } const workdir = core.getInput('workdir'); - const files = Util.getInputList('files'); + const files = getInputList('files'); const target = core.getInput('target'); let def = {}; From ba406cd72e02d724018bd99fed9ef4a6984bf4d9 Mon Sep 17 00:00:00 2001 From: CrazyMax <1951866+crazy-max@users.noreply.github.com> Date: Sun, 6 Jul 2025 11:15:54 +0200 Subject: [PATCH 3/3] subaction: check expected output Signed-off-by: CrazyMax <1951866+crazy-max@users.noreply.github.com> --- .github/workflows/ci-subaction.yml | 46 ++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) diff --git a/.github/workflows/ci-subaction.yml b/.github/workflows/ci-subaction.yml index 6274352..4235b1d 100644 --- a/.github/workflows/ci-subaction.yml +++ b/.github/workflows/ci-subaction.yml @@ -33,14 +33,20 @@ jobs: include: - testdir: group + expected: > + ["t1","t2"] - testdir: group-matrix target: validate + expected: > + ["lint-default","lint-labs","lint-nydus","lint-proto","lint-yaml","validate-doctoc","validate-vendor"] - testdir: multi-files files: | docker-bake.json docker-bake.hcl + expected: > + ["v1-tag","v2-tag"] steps: - name: Checkout @@ -53,6 +59,21 @@ jobs: workdir: ./test/${{ matrix.testdir }} files: ${{ matrix.files }} target: ${{ matrix.target }} + - + name: Check output + uses: actions/github-script@v7 + env: + INPUT_TARGETS: ${{ steps.gen.outputs.targets }} + INPUT_EXPECTED: ${{ matrix.expected }} + with: + script: | + const targets = JSON.stringify(JSON.parse(core.getInput('targets'))); + const expected = JSON.stringify(JSON.parse(core.getInput('expected'))); + if (targets !== expected) { + throw new Error(`Targets do not match expected values: ${targets} != ${expected}`); + } else { + core.info(`✅`); + } matrix: runs-on: ubuntu-latest @@ -62,20 +83,30 @@ jobs: include: - testdir: group + expected: > + [{"target":"t1"},{"target":"t2"}] - testdir: group-matrix target: validate + expected: > + [{"target":"lint-default"},{"target":"lint-labs"},{"target":"lint-nydus"},{"target":"lint-proto"},{"target":"lint-yaml"},{"target":"validate-doctoc"},{"target":"validate-vendor"}] - testdir: group-with-platform target: validate + expected: > + [{"target":"lint"},{"target":"lint-gopls"},{"target":"validate-docs"},{"target":"validate-vendor"}] - testdir: group-with-platform target: validate fields: platforms + expected: > + [{"target":"lint","platforms":"darwin/amd64"},{"target":"lint","platforms":"darwin/arm64"},{"target":"lint","platforms":"linux/amd64"},{"target":"lint","platforms":"linux/arm64"},{"target":"lint","platforms":"linux/s390x"},{"target":"lint","platforms":"linux/ppc64le"},{"target":"lint","platforms":"linux/riscv64"},{"target":"lint","platforms":"windows/amd64"},{"target":"lint","platforms":"windows/arm64"},{"target":"lint-gopls","platforms":"darwin/amd64"},{"target":"lint-gopls","platforms":"darwin/arm64"},{"target":"lint-gopls","platforms":"linux/amd64"},{"target":"lint-gopls","platforms":"linux/arm64"},{"target":"lint-gopls","platforms":"linux/s390x"},{"target":"lint-gopls","platforms":"linux/ppc64le"},{"target":"lint-gopls","platforms":"linux/riscv64"},{"target":"lint-gopls","platforms":"windows/amd64"},{"target":"lint-gopls","platforms":"windows/arm64"},{"target":"validate-docs"},{"target":"validate-vendor"}] - testdir: group-with-platform target: validate fields: platforms,dockerfile + expected: > + [{"target":"lint","dockerfile":"./hack/dockerfiles/lint.Dockerfile"},{"target":"lint","dockerfile":"./hack/dockerfiles/lint.Dockerfile","platforms":"darwin/amd64"},{"target":"lint","dockerfile":"./hack/dockerfiles/lint.Dockerfile","platforms":"darwin/arm64"},{"target":"lint","dockerfile":"./hack/dockerfiles/lint.Dockerfile","platforms":"linux/amd64"},{"target":"lint","dockerfile":"./hack/dockerfiles/lint.Dockerfile","platforms":"linux/arm64"},{"target":"lint","dockerfile":"./hack/dockerfiles/lint.Dockerfile","platforms":"linux/s390x"},{"target":"lint","dockerfile":"./hack/dockerfiles/lint.Dockerfile","platforms":"linux/ppc64le"},{"target":"lint","dockerfile":"./hack/dockerfiles/lint.Dockerfile","platforms":"linux/riscv64"},{"target":"lint","dockerfile":"./hack/dockerfiles/lint.Dockerfile","platforms":"windows/amd64"},{"target":"lint","dockerfile":"./hack/dockerfiles/lint.Dockerfile","platforms":"windows/arm64"},{"target":"lint-gopls","dockerfile":"./hack/dockerfiles/lint.Dockerfile"},{"target":"lint-gopls","dockerfile":"./hack/dockerfiles/lint.Dockerfile","platforms":"darwin/amd64"},{"target":"lint-gopls","dockerfile":"./hack/dockerfiles/lint.Dockerfile","platforms":"darwin/arm64"},{"target":"lint-gopls","dockerfile":"./hack/dockerfiles/lint.Dockerfile","platforms":"linux/amd64"},{"target":"lint-gopls","dockerfile":"./hack/dockerfiles/lint.Dockerfile","platforms":"linux/arm64"},{"target":"lint-gopls","dockerfile":"./hack/dockerfiles/lint.Dockerfile","platforms":"linux/s390x"},{"target":"lint-gopls","dockerfile":"./hack/dockerfiles/lint.Dockerfile","platforms":"linux/ppc64le"},{"target":"lint-gopls","dockerfile":"./hack/dockerfiles/lint.Dockerfile","platforms":"linux/riscv64"},{"target":"lint-gopls","dockerfile":"./hack/dockerfiles/lint.Dockerfile","platforms":"windows/amd64"},{"target":"lint-gopls","dockerfile":"./hack/dockerfiles/lint.Dockerfile","platforms":"windows/arm64"},{"target":"validate-docs","dockerfile":"./hack/dockerfiles/docs.Dockerfile"},{"target":"validate-vendor","dockerfile":"./hack/dockerfiles/vendor.Dockerfile"}] steps: - name: Checkout @@ -88,3 +119,18 @@ jobs: workdir: ./test/${{ matrix.testdir }} target: ${{ matrix.target }} fields: ${{ matrix.fields }} + - + name: Check output + uses: actions/github-script@v7 + env: + INPUT_MATRIX: ${{ steps.gen.outputs.matrix }} + INPUT_EXPECTED: ${{ matrix.expected }} + with: + script: | + const matrix = JSON.stringify(JSON.parse(core.getInput('matrix'))); + const expected = JSON.stringify(JSON.parse(core.getInput('expected'))); + if (matrix !== expected) { + throw new Error(`Matrix do not match expected values: ${matrix} != ${expected}`); + } else { + core.info(`✅`); + }