Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion .github/dependabot.yml
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,9 @@ updates:
- "dependencies"
- "bot"
- package-ecosystem: "npm"
directory: "/"
directories:
- "/"
- "/subaction/matrix"
schedule:
interval: "daily"
cooldown:
Expand Down
101 changes: 90 additions & 11 deletions .github/workflows/ci-subaction.yml
Original file line number Diff line number Diff line change
Expand Up @@ -36,30 +36,68 @@ jobs:
include:
-
testdir: group
expected: >
expected-outcome: success
expected-matrix: >
[{"target":"t1"},{"target":"t2"}]
expected-max-layers: 1
expected-layers: 1
expected-layered-matrix: >
[[{"target":"t1"},{"target":"t2"}]]
-
testdir: group-matrix
target: validate
expected: >
expected-outcome: success
expected-matrix: >
[{"target":"lint-default"},{"target":"lint-labs"},{"target":"lint-nydus"},{"target":"lint-proto"},{"target":"lint-yaml"},{"target":"validate-doctoc"},{"target":"validate-vendor"}]
expected-max-layers: 1
expected-layers: 1
expected-layered-matrix: >
[[{"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: >
expected-outcome: success
expected-matrix: >
[{"target":"lint"},{"target":"lint-gopls"},{"target":"validate-docs"},{"target":"validate-vendor"}]
expected-max-layers: 1
expected-layers: 1
expected-layered-matrix: >
[[{"target":"lint"},{"target":"lint-gopls"},{"target":"validate-docs"},{"target":"validate-vendor"}]]
-
testdir: group-with-platform
target: validate
fields: platforms
expected: >
expected-outcome: success
expected-matrix: >
[{"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"}]
expected-max-layers: 1
expected-layers: 1
expected-layered-matrix: >
[[{"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: >
expected-outcome: success
expected-matrix: >
[{"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"}]
expected-max-layers: 1
expected-layers: 1
expected-layered-matrix: >
[[{"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"}]]
-
testdir: contexts-target-cycle
expected-outcome: failure
-
testdir: contexts-target-with-matrix
expected-outcome: success
fields: platforms
expected-matrix: >
[{"target":"base"},{"target":"t1_darwin-amd64","platforms":"darwin/amd64"},{"target":"t1_darwin-arm64","platforms":"darwin/arm64"},{"target":"t1_linux-amd64","platforms":"linux/amd64"},{"target":"t1_linux-arm64","platforms":"linux/arm64"},{"target":"t1_linux-ppc64le","platforms":"linux/ppc64le"},{"target":"t1_linux-riscv64","platforms":"linux/riscv64"},{"target":"t1_linux-s390x","platforms":"linux/s390x"},{"target":"t1_windows-amd64","platforms":"windows/amd64"},{"target":"t1_windows-arm64","platforms":"windows/arm64"},{"target":"t2_darwin-amd64","platforms":"darwin/amd64"},{"target":"t2_darwin-arm64","platforms":"darwin/arm64"},{"target":"t2_linux-amd64","platforms":"linux/amd64"},{"target":"t2_linux-arm64","platforms":"linux/arm64"},{"target":"t2_linux-ppc64le","platforms":"linux/ppc64le"},{"target":"t2_linux-riscv64","platforms":"linux/riscv64"},{"target":"t2_linux-s390x","platforms":"linux/s390x"},{"target":"t2_windows-amd64","platforms":"windows/amd64"},{"target":"t2_windows-arm64","platforms":"windows/arm64"},{"target":"t3","platforms":"linux/arm64"},{"target":"t4"}]
expected-max-layers: 4
expected-layers: 4
expected-layered-matrix: >
[[{"target":"base"}],[{"target":"t1_darwin-amd64","platforms":"darwin/amd64"},{"target":"t1_darwin-arm64","platforms":"darwin/arm64"},{"target":"t1_linux-amd64","platforms":"linux/amd64"},{"target":"t1_linux-arm64","platforms":"linux/arm64"},{"target":"t1_linux-ppc64le","platforms":"linux/ppc64le"},{"target":"t1_linux-riscv64","platforms":"linux/riscv64"},{"target":"t1_linux-s390x","platforms":"linux/s390x"},{"target":"t1_windows-amd64","platforms":"windows/amd64"},{"target":"t1_windows-arm64","platforms":"windows/arm64"},{"target":"t4"}],[{"target":"t2_darwin-amd64","platforms":"darwin/amd64"},{"target":"t2_darwin-arm64","platforms":"darwin/arm64"},{"target":"t2_linux-amd64","platforms":"linux/amd64"},{"target":"t2_linux-arm64","platforms":"linux/arm64"},{"target":"t2_linux-ppc64le","platforms":"linux/ppc64le"},{"target":"t2_linux-riscv64","platforms":"linux/riscv64"},{"target":"t2_linux-s390x","platforms":"linux/s390x"},{"target":"t2_windows-amd64","platforms":"windows/amd64"},{"target":"t2_windows-arm64","platforms":"windows/arm64"}],[{"target":"t3","platforms":"linux/arm64"}]]
steps:
-
name: Checkout
Expand All @@ -68,6 +106,7 @@ jobs:
name: Matrix gen
id: gen
uses: ./subaction/matrix
continue-on-error: true
with:
workdir: ./test/${{ matrix.testdir }}
target: ${{ matrix.target }}
Expand All @@ -76,14 +115,54 @@ jobs:
name: Check output
uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0
env:
INPUT_OUTCOME: ${{ steps.gen.outcome }}
INPUT_EXPECTED_OUTCOME: ${{ matrix.expected-outcome }}
INPUT_MATRIX: ${{ steps.gen.outputs.matrix }}
INPUT_EXPECTED: ${{ matrix.expected }}
INPUT_EXPECTED_MATRIX: ${{ matrix.expected-matrix }}
INPUT_MAX_LAYERS: ${{ steps.gen.outputs.max-layers }}
INPUT_EXPECTED_MAX_LAYERS: ${{ matrix.expected-max-layers }}
INPUT_LAYERS: ${{ steps.gen.outputs.layers }}
INPUT_EXPECTED_LAYERS: ${{ matrix.expected-layers }}
INPUT_LAYERED_MATRIX: ${{ steps.gen.outputs.layered-matrix }}
INPUT_EXPECTED_LAYERED_MATRIX: ${{ matrix.expected-layered-matrix }}
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}`);
// Check outcome first
const outcome = core.getInput('outcome');
const expectedOutcome = core.getInput('expected_outcome');
if (outcome !== expectedOutcome) {
throw new Error(`Outcome does not match expected value: ${outcome} != ${expectedOutcome}`);
} else {
core.info(`✅`);
core.info("Outcome ✅");
}
if (outcome == "failure") {
return;
}
// Check other variables
const checks = {
"matrix": [
JSON.stringify(JSON.parse(core.getInput('matrix'))),
JSON.stringify(JSON.parse(core.getInput('expected_matrix')))
],
"max-layers": [
JSON.stringify(JSON.parse(core.getInput('max_layers'))),
JSON.stringify(JSON.parse(core.getInput('expected_max_layers')))
],
"layers": [
JSON.stringify(JSON.parse(core.getInput('layers'))),
JSON.stringify(JSON.parse(core.getInput('expected_layers')))
],
"layered-matrix": [
JSON.stringify(JSON.parse(core.getInput('layered_matrix'))),
JSON.stringify(JSON.parse(core.getInput('expected_layered_matrix')))
]
};
for (const checkName in checks) {
const value = checks[checkName][0];
const expected = checks[checkName][1];
if (value !== expected) {
throw new Error(`${checkName} does not match expected value: ${value} != ${expected}`);
} else {
core.info(`${checkName} ✅`);
}
}
4 changes: 2 additions & 2 deletions .github/workflows/update-dist.yml
Original file line number Diff line number Diff line change
Expand Up @@ -44,12 +44,12 @@ jobs:
-
name: Commit and push dist
run: |
if [ -n "$(git status --porcelain -- dist)" ]; then
if [ -n "$(git status --porcelain -- dist subaction/matrix/dist)" ]; then
(
set -x
git config user.name "github-actions[bot]"
git config user.email "41898282+github-actions[bot]@users.noreply.github.com"
git add dist
git add dist subaction/matrix/dist
git commit -m "[dependabot skip] chore: update generated content"
git push
)
Expand Down
6 changes: 6 additions & 0 deletions .yarnrc.yml
Original file line number Diff line number Diff line change
Expand Up @@ -22,3 +22,9 @@ enableGlobalCache: false
enableHardenedMode: true
enableScripts: false
npmMinimalAgeGate: 2d

catalog:
"@actions/core": ^3.0.1
"@docker/actions-toolkit": ^0.92.0
esbuild: ^0.28.0
generate-license-file: ^4.1.1
10 changes: 6 additions & 4 deletions dev.Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -40,10 +40,12 @@ RUN --mount=target=/context \
--mount=type=cache,target=/src/node_modules <<EOT
set -e
rsync -a /context/. .
rm -rf dist
yarn run build
rm -rf dist subaction/matrix/dist
yarn workspaces foreach --all run build
mkdir /out
cp -r dist /out
mkdir -p /out/subaction/matrix
cp -r subaction/matrix/dist /out/subaction/matrix
EOT

FROM scratch AS build-update
Expand All @@ -55,9 +57,9 @@ RUN --mount=target=/context \
set -e
rsync -a /context/. .
git add -A
rm -rf dist
rm -rf dist subaction/matrix/dist
cp -rf /out/* .
if [ -n "$(git status --porcelain -- dist)" ]; then
if [ -n "$(git status --porcelain -- dist subaction/matrix/dist)" ]; then
echo >&2 'ERROR: Build result differs. Please build first with "docker buildx bake build"'
git status --porcelain -- dist
exit 1
Expand Down
5 changes: 3 additions & 2 deletions dist/licenses.txt

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion eslint.config.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import eslintPluginPrettier from 'eslint-plugin-prettier';

export default defineConfig([
{
ignores: ['.yarn/**/*', 'coverage/**/*', 'dist/**/*']
ignores: ['.yarn/**/*', 'coverage/**/*', 'dist/**/*', 'subaction/matrix/dist/**/*']
},
js.configs.recommended,
...tseslint.configs['flat/recommended'],
Expand Down
11 changes: 7 additions & 4 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,9 @@
"test": "vitest run",
"license": "generate-license-file --input package.json --output dist/licenses.txt --overwrite --ci --no-spinner --eol lf"
},
"workspaces": [
"subaction/matrix"
],
"repository": {
"type": "git",
"url": "git+https://github.com/docker/bake-action.git"
Expand All @@ -24,8 +27,8 @@
"license": "Apache-2.0",
"packageManager": "yarn@4.15.0",
"dependencies": {
"@actions/core": "^3.0.1",
"@docker/actions-toolkit": "^0.92.0",
"@actions/core": "catalog:",
"@docker/actions-toolkit": "catalog:",
"handlebars": "^4.7.9"
},
"devDependencies": {
Expand All @@ -35,11 +38,11 @@
"@typescript-eslint/parser": "^8.56.1",
"@vitest/coverage-v8": "^4.0.18",
"@vitest/eslint-plugin": "^1.6.9",
"esbuild": "^0.28.0",
"esbuild": "catalog:",
"eslint": "^9.39.3",
"eslint-config-prettier": "^10.1.8",
"eslint-plugin-prettier": "^5.5.5",
"generate-license-file": "^4.1.1",
"generate-license-file": "catalog:",
"globals": "^17.3.0",
"prettier": "^3.8.1",
"typescript": "^5.9.3",
Expand Down
Loading