Compare commits

..

170 Commits

Author SHA1 Message Date
CrazyMax
9505deb078 Merge pull request #1027 from docker/dependabot/npm_and_yarn/sigstore/sign-4.1.1
Some checks failed
publish / publish (push) Has been cancelled
build(deps): bump @sigstore/sign from 4.1.0 to 4.1.1
2026-03-19 10:04:24 +01:00
dependabot[bot]
af784a2022 build(deps): bump @sigstore/sign from 4.1.0 to 4.1.1
Bumps [@sigstore/sign](https://github.com/sigstore/sigstore-js) from 4.1.0 to 4.1.1.
- [Release notes](https://github.com/sigstore/sigstore-js/releases)
- [Commits](https://github.com/sigstore/sigstore-js/compare/sigstore@4.1.0...@sigstore/sign@4.1.1)

---
updated-dependencies:
- dependency-name: "@sigstore/sign"
  dependency-version: 4.1.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-19 09:01:22 +00:00
CrazyMax
afcc1c08a8 Merge pull request #1026 from docker/dependabot/npm_and_yarn/sigstore/tuf-4.0.2
build(deps): bump @sigstore/tuf from 4.0.1 to 4.0.2
2026-03-19 09:59:27 +01:00
CrazyMax
af0890ba7a Merge pull request #1025 from crazy-max/git-context-attrs
buildx(build): support extensible git context attrs
2026-03-19 09:58:55 +01:00
dependabot[bot]
c4109c3fc2 build(deps): bump @sigstore/tuf from 4.0.1 to 4.0.2
Bumps [@sigstore/tuf](https://github.com/sigstore/sigstore-js) from 4.0.1 to 4.0.2.
- [Release notes](https://github.com/sigstore/sigstore-js/releases)
- [Commits](https://github.com/sigstore/sigstore-js/compare/@sigstore/sign@4.0.1...@sigstore/tuf@4.0.2)

---
updated-dependencies:
- dependency-name: "@sigstore/tuf"
  dependency-version: 4.0.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-18 22:53:43 +00:00
CrazyMax
e314ca9bb5 buildx(build): support extensible git context attrs
Signed-off-by: CrazyMax <1951866+crazy-max@users.noreply.github.com>
2026-03-18 22:04:45 +01:00
CrazyMax
29efe4d6a8 Merge pull request #1024 from crazy-max/subdir-dot
Some checks failed
publish / publish (push) Has been cancelled
buildx(build): ignore dot git context subdir
2026-03-18 09:59:13 +01:00
CrazyMax
aacbc67b8d buildx(build): ignore dot git context subdir
Signed-off-by: CrazyMax <1951866+crazy-max@users.noreply.github.com>
2026-03-18 09:53:58 +01:00
CrazyMax
d71b84aad5 Merge pull request #1020 from crazy-max/build-git-context-opts
Some checks failed
publish / publish (push) Has been cancelled
buildx(build): support git context subdir and other query options
2026-03-18 09:24:44 +01:00
CrazyMax
ea05649ce1 Merge pull request #1023 from crazy-max/bake-vars
bake: var cmd opt support
2026-03-18 09:24:22 +01:00
CrazyMax
012ae0603d bake: var cmd opt support
Signed-off-by: CrazyMax <1951866+crazy-max@users.noreply.github.com>
2026-03-18 09:15:22 +01:00
CrazyMax
6194cf96c1 Merge pull request #1022 from docker/dependabot/npm_and_yarn/fast-xml-parser-5.5.6
build(deps): bump fast-xml-parser from 5.4.1 to 5.5.6
2026-03-18 09:00:41 +01:00
CrazyMax
e804b694a2 Merge pull request #1021 from docker/dependabot/npm_and_yarn/csv-parse-6.2.0
build(deps): bump csv-parse from 6.1.0 to 6.2.0
2026-03-18 09:00:07 +01:00
dependabot[bot]
d2a882884d build(deps): bump fast-xml-parser from 5.4.1 to 5.5.6
Bumps [fast-xml-parser](https://github.com/NaturalIntelligence/fast-xml-parser) from 5.4.1 to 5.5.6.
- [Release notes](https://github.com/NaturalIntelligence/fast-xml-parser/releases)
- [Changelog](https://github.com/NaturalIntelligence/fast-xml-parser/blob/master/CHANGELOG.md)
- [Commits](https://github.com/NaturalIntelligence/fast-xml-parser/compare/v5.4.1...v5.5.6)

---
updated-dependencies:
- dependency-name: fast-xml-parser
  dependency-version: 5.5.6
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-18 01:53:33 +00:00
dependabot[bot]
d820ad4123 build(deps): bump csv-parse from 6.1.0 to 6.2.0
Bumps [csv-parse](https://github.com/adaltas/node-csv/tree/HEAD/packages/csv-parse) from 6.1.0 to 6.2.0.
- [Changelog](https://github.com/adaltas/node-csv/blob/master/packages/csv-parse/CHANGELOG.md)
- [Commits](https://github.com/adaltas/node-csv/commits/csv-parse@6.2.0/packages/csv-parse)

---
updated-dependencies:
- dependency-name: csv-parse
  dependency-version: 6.2.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-17 22:53:46 +00:00
CrazyMax
a5d905690f Merge pull request #1019 from docker/dependabot/github_actions/softprops/action-gh-release-2.6.1
build(deps): bump softprops/action-gh-release from 2.5.0 to 2.6.1
2026-03-17 15:42:31 +01:00
CrazyMax
6233293ae6 buildx(build): support git context subdir and other query options
Signed-off-by: CrazyMax <1951866+crazy-max@users.noreply.github.com>
2026-03-17 13:09:33 +01:00
dependabot[bot]
9d10fe0e06 build(deps): bump softprops/action-gh-release from 2.5.0 to 2.6.1
Bumps [softprops/action-gh-release](https://github.com/softprops/action-gh-release) from 2.5.0 to 2.6.1.
- [Release notes](https://github.com/softprops/action-gh-release/releases)
- [Changelog](https://github.com/softprops/action-gh-release/blob/master/CHANGELOG.md)
- [Commits](a06a81a03e...153bb8e044)

---
updated-dependencies:
- dependency-name: softprops/action-gh-release
  dependency-version: 2.6.1
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-16 22:53:05 +00:00
CrazyMax
a8dc8088d4 Merge pull request #1018 from docker/dependabot/npm_and_yarn/undici-6.24.1
build(deps): bump undici from 6.23.0 to 6.24.1
2026-03-14 12:51:58 +01:00
dependabot[bot]
4bc2c14908 build(deps): bump undici from 6.23.0 to 6.24.1
Bumps [undici](https://github.com/nodejs/undici) from 6.23.0 to 6.24.1.
- [Release notes](https://github.com/nodejs/undici/releases)
- [Commits](https://github.com/nodejs/undici/compare/v6.23.0...v6.24.1)

---
updated-dependencies:
- dependency-name: undici
  dependency-version: 6.24.1
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-14 09:18:22 +00:00
CrazyMax
ad2312d5f1 Merge pull request #1016 from crazy-max/imagetools-inspect-retry
Some checks failed
publish / publish (push) Has been cancelled
buildx(imagetools): make manifest retries configurable
2026-03-13 13:46:44 +01:00
CrazyMax
21e2b75b0b buildx(imagetools): make manifest retries configurable
Signed-off-by: CrazyMax <1951866+crazy-max@users.noreply.github.com>
2026-03-13 13:29:09 +01:00
CrazyMax
4d926d8b7b Merge pull request #1015 from docker/dependabot/npm_and_yarn/actions/artifact-6.2.1
Some checks failed
publish / publish (push) Has been cancelled
build(deps): bump @actions/artifact from 6.2.0 to 6.2.1
2026-03-13 11:19:34 +01:00
dependabot[bot]
293c3cdcfe build(deps): bump @actions/artifact from 6.2.0 to 6.2.1
Bumps [@actions/artifact](https://github.com/actions/toolkit/tree/HEAD/packages/artifact) from 6.2.0 to 6.2.1.
- [Changelog](https://github.com/actions/toolkit/blob/main/packages/artifact/RELEASES.md)
- [Commits](https://github.com/actions/toolkit/commits/HEAD/packages/artifact)

---
updated-dependencies:
- dependency-name: "@actions/artifact"
  dependency-version: 6.2.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-11 22:53:45 +00:00
CrazyMax
17071615a7 Merge pull request #1014 from crazy-max/imagetools-annotations
buildx(imagetools): add annotations support for create command
2026-03-10 12:22:44 +01:00
CrazyMax
0cc9e68b03 buildx(imagetools): add annotations support for create command
Signed-off-by: CrazyMax <1951866+crazy-max@users.noreply.github.com>
2026-03-10 12:06:12 +01:00
CrazyMax
b732db2937 Merge pull request #809 from crazy-max/git-query-url
Some checks failed
publish / publish (push) Has been cancelled
build: git context query format support
2026-03-09 17:26:11 +01:00
CrazyMax
8696544f14 Merge pull request #1013 from crazy-max/imagetools-silent
buildx(imagetools): add skip support and configurable create command silence
2026-03-09 11:32:54 +01:00
CrazyMax
d92ed04680 buildx(imagetools): add skip support and configurable create command silence
Signed-off-by: CrazyMax <1951866+crazy-max@users.noreply.github.com>
2026-03-09 11:17:55 +01:00
CrazyMax
3bb4ae38ea build: git context query format support
Signed-off-by: CrazyMax <1951866+crazy-max@users.noreply.github.com>
2026-03-09 10:47:48 +01:00
CrazyMax
09c0f6a78e Merge pull request #1009 from crazy-max/imagetools-create
Some checks failed
publish / publish (push) Has been cancelled
buildx(imagetools): implement create func with metadata parsing
2026-03-06 09:37:07 +01:00
CrazyMax
3c25c1eed2 Merge pull request #1011 from docker/dependabot/github_actions/docker/setup-buildx-action-4
build(deps): bump docker/setup-buildx-action from 3 to 4
2026-03-06 09:36:29 +01:00
CrazyMax
ee671ae33e Merge pull request #1010 from docker/dependabot/github_actions/docker/bake-action-7
build(deps): bump docker/bake-action from 6 to 7
2026-03-06 09:36:05 +01:00
CrazyMax
960acb25ae ci: switch to matrix subaction
Signed-off-by: CrazyMax <1951866+crazy-max@users.noreply.github.com>
2026-03-06 09:28:21 +01:00
CrazyMax
1ff078d955 Merge pull request #1012 from docker/bot/docker-releases-json
Update `.github/docker-releases.json`
2026-03-06 09:22:38 +01:00
crazy-max
abe7883e9a github: update .github/docker-releases.json
Signed-off-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-03-06 00:46:27 +00:00
dependabot[bot]
c16b4fdf35 build(deps): bump docker/setup-buildx-action from 3 to 4
Bumps [docker/setup-buildx-action](https://github.com/docker/setup-buildx-action) from 3 to 4.
- [Release notes](https://github.com/docker/setup-buildx-action/releases)
- [Commits](https://github.com/docker/setup-buildx-action/compare/v3...v4)

---
updated-dependencies:
- dependency-name: docker/setup-buildx-action
  dependency-version: '4'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-05 23:04:37 +00:00
dependabot[bot]
211c9b2312 build(deps): bump docker/bake-action from 6 to 7
Bumps [docker/bake-action](https://github.com/docker/bake-action) from 6 to 7.
- [Release notes](https://github.com/docker/bake-action/releases)
- [Commits](https://github.com/docker/bake-action/compare/v6...v7)

---
updated-dependencies:
- dependency-name: docker/bake-action
  dependency-version: '7'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-05 23:04:32 +00:00
CrazyMax
a30e0f51eb Merge pull request #1007 from crazy-max/buildkit-0.28.0
update buildkit to 0.28.0 and buildx to 0.32.1
2026-03-05 14:51:09 +01:00
CrazyMax
61c3c53dbf update buildkit to 0.28.0 and buildx to 0.32.1
Signed-off-by: CrazyMax <1951866+crazy-max@users.noreply.github.com>
2026-03-05 14:36:36 +01:00
CrazyMax
91a5724116 buildx(imagetools): implement create func with metadata parsing
Signed-off-by: CrazyMax <1951866+crazy-max@users.noreply.github.com>
2026-03-05 13:42:21 +01:00
Tõnis Tiigi
9998df7a3d Merge pull request #1008 from docker/bot/buildx-releases-json
Update `.github/buildx-releases.json`
2026-03-04 12:39:44 -08:00
tonistiigi
3d448bd483 github: update .github/buildx-releases.json
Signed-off-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-03-04 20:39:03 +00:00
CrazyMax
51cc1b5526 Merge pull request #1006 from crazy-max/rm-field-history
Some checks failed
publish / publish (push) Has been cancelled
buildx(history): require buildx >=0.23.0 to export a build record
2026-03-04 14:58:07 +01:00
CrazyMax
58584e3d97 buildx(history): require buildx >=0.23.0 to export a build record
Signed-off-by: CrazyMax <1951866+crazy-max@users.noreply.github.com>
2026-03-04 14:38:19 +01:00
CrazyMax
f06e39e022 buildx(history): remove unused field
Signed-off-by: CrazyMax <1951866+crazy-max@users.noreply.github.com>
2026-03-04 14:34:21 +01:00
CrazyMax
4c705618e1 Merge pull request #1005 from crazy-max/util-inputlist-comment
util: add commentNoInfix support to getInputList
2026-03-04 13:36:35 +01:00
CrazyMax
1ebb922e84 util: add commentNoInfix support to getInputList
Signed-off-by: CrazyMax <1951866+crazy-max@users.noreply.github.com>
2026-03-04 12:57:36 +01:00
Tõnis Tiigi
9e446b0b90 Merge pull request #1004 from docker/bot/buildx-releases-json
Some checks failed
publish / publish (push) Has been cancelled
Update `.github/buildx-releases.json`
2026-03-03 17:29:22 -08:00
tonistiigi
d682d6d4a5 github: update .github/buildx-releases.json
Signed-off-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-03-04 01:28:43 +00:00
CrazyMax
ca5ab569e5 Merge pull request #895 from crazy-max/remove-export-legacy
buildx(history): remove legacy export-build tool
2026-03-03 21:16:01 +01:00
CrazyMax
5b2d914820 Merge pull request #1002 from docker/dependabot/github_actions/crazy-max/ghaction-github-runtime-4
build(deps): bump crazy-max/ghaction-github-runtime from 3 to 4
2026-03-03 10:54:17 +01:00
CrazyMax
b873721f89 Merge pull request #1000 from crazy-max/node24
update to node 24
2026-03-03 10:53:27 +01:00
dependabot[bot]
c975cd6494 build(deps): bump crazy-max/ghaction-github-runtime from 3 to 4
Bumps [crazy-max/ghaction-github-runtime](https://github.com/crazy-max/ghaction-github-runtime) from 3 to 4.
- [Release notes](https://github.com/crazy-max/ghaction-github-runtime/releases)
- [Commits](https://github.com/crazy-max/ghaction-github-runtime/compare/v3...v4)

---
updated-dependencies:
- dependency-name: crazy-max/ghaction-github-runtime
  dependency-version: '4'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-03 00:08:23 +00:00
CrazyMax
a0a3952b2d update to node 24
Signed-off-by: CrazyMax <1951866+crazy-max@users.noreply.github.com>
2026-03-02 19:40:15 +01:00
CrazyMax
4af1413de8 Merge pull request #1001 from crazy-max/buildkit-0.28.0-rc2
update buildkit to 0.28.0-rc2 and buildx to 0.32.0-rc2
2026-03-02 17:13:06 +01:00
CrazyMax
83a4cb6e7f update buildkit to 0.28.0-rc2 and buildx to 0.32.0-rc2
Signed-off-by: CrazyMax <1951866+crazy-max@users.noreply.github.com>
2026-03-02 16:19:08 +01:00
CrazyMax
9edbb73678 buildx(history): remove legacy export-build tool
Signed-off-by: CrazyMax <1951866+crazy-max@users.noreply.github.com>
2026-03-02 15:11:54 +01:00
CrazyMax
6fc9119f7e Merge pull request #998 from crazy-max/test-output
test: fix name output
2026-03-01 14:28:17 +01:00
CrazyMax
b2caa9ae45 Merge pull request #997 from docker/bot/docker-releases-json
Update `.github/docker-releases.json`
2026-03-01 11:57:27 +01:00
CrazyMax
80446a55b4 Merge pull request #996 from docker/bot/buildx-releases-json
Update `.github/buildx-releases.json`
2026-03-01 11:57:10 +01:00
CrazyMax
c7c816aa2f test: fix name output
Signed-off-by: CrazyMax <1951866+crazy-max@users.noreply.github.com>
2026-03-01 11:51:12 +01:00
crazy-max
3f87521aad github: update .github/docker-releases.json
Signed-off-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-02-28 00:38:35 +00:00
crazy-max
c186677904 github: update .github/buildx-releases.json
Signed-off-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-02-28 00:27:57 +00:00
CrazyMax
e5d20b9b8b Merge pull request #995 from crazy-max/dev-deps
Some checks failed
publish / publish (push) Has been cancelled
update dev dependencies
2026-02-27 12:28:24 +01:00
CrazyMax
a45bcd1296 Merge pull request #991 from docker/dependabot/github_actions/actions/download-artifact-8
build(deps): bump actions/download-artifact from 7 to 8
2026-02-27 12:26:39 +01:00
CrazyMax
26ff71b24e update dev dependencies
Signed-off-by: CrazyMax <1951866+crazy-max@users.noreply.github.com>
2026-02-27 12:24:36 +01:00
CrazyMax
b1b6c30312 test: restore all-skipped coverage guard with custom reporter
Signed-off-by: CrazyMax <1951866+crazy-max@users.noreply.github.com>
2026-02-27 12:24:36 +01:00
CrazyMax
78f85cbf92 Merge pull request #994 from crazy-max/update-license
dockerfile: update addlicense to v1.2.0
2026-02-27 12:14:50 +01:00
CrazyMax
1b45318512 update vitest to v4
Signed-off-by: CrazyMax <1951866+crazy-max@users.noreply.github.com>
2026-02-27 11:53:46 +01:00
CrazyMax
aa6e45fd98 Merge pull request #992 from docker/dependabot/npm_and_yarn/fast-xml-parser-5.4.1
build(deps): bump fast-xml-parser from 5.3.6 to 5.4.1
2026-02-27 11:44:23 +01:00
CrazyMax
4750efa111 dockerfile: update addlicense to v1.2.0
Signed-off-by: CrazyMax <1951866+crazy-max@users.noreply.github.com>
2026-02-27 11:43:14 +01:00
CrazyMax
aafdd47b20 Merge pull request #993 from crazy-max/eslint-flat
migrate to eslint v9 flat config
2026-02-27 11:37:07 +01:00
CrazyMax
6e348fa8af migrate to eslint v9 flat config
Signed-off-by: CrazyMax <1951866+crazy-max@users.noreply.github.com>
2026-02-27 11:31:18 +01:00
dependabot[bot]
ed4752598a build(deps): bump fast-xml-parser from 5.3.6 to 5.4.1
Bumps [fast-xml-parser](https://github.com/NaturalIntelligence/fast-xml-parser) from 5.3.6 to 5.4.1.
- [Release notes](https://github.com/NaturalIntelligence/fast-xml-parser/releases)
- [Changelog](https://github.com/NaturalIntelligence/fast-xml-parser/blob/master/CHANGELOG.md)
- [Commits](https://github.com/NaturalIntelligence/fast-xml-parser/compare/v5.3.6...v5.4.1)

---
updated-dependencies:
- dependency-name: fast-xml-parser
  dependency-version: 5.4.1
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-02-27 09:51:14 +00:00
CrazyMax
7ad1857b6c Merge pull request #982 from crazy-max/vitest
switch from Jest to Vitest
2026-02-27 10:49:38 +01:00
CrazyMax
0973a1ac76 remove uneeded dev dependencies
Signed-off-by: CrazyMax <1951866+crazy-max@users.noreply.github.com>
2026-02-27 10:28:56 +01:00
CrazyMax
2b2119e051 test: fix docker isAvailable test
Signed-off-by: CrazyMax <1951866+crazy-max@users.noreply.github.com>
2026-02-27 03:02:01 +01:00
CrazyMax
b6a3cad225 test: inline mocks in unit test setup
Signed-off-by: CrazyMax <1951866+crazy-max@users.noreply.github.com>
2026-02-27 03:02:00 +01:00
CrazyMax
260dd0518b test: move git remoteSha api test to integration
Signed-off-by: CrazyMax <1951866+crazy-max@users.noreply.github.com>
2026-02-27 03:01:55 +01:00
CrazyMax
cb8840fbce test: move github repoData api test to integration
Signed-off-by: CrazyMax <1951866+crazy-max@users.noreply.github.com>
2026-02-27 03:01:55 +01:00
CrazyMax
3692a3c56f migrate to vitest/eslint-plugin
Signed-off-by: CrazyMax <1951866+crazy-max@users.noreply.github.com>
2026-02-27 01:45:08 +01:00
dependabot[bot]
8a60689b00 build(deps): bump actions/download-artifact from 7 to 8
Bumps [actions/download-artifact](https://github.com/actions/download-artifact) from 7 to 8.
- [Release notes](https://github.com/actions/download-artifact/releases)
- [Commits](https://github.com/actions/download-artifact/compare/v7...v8)

---
updated-dependencies:
- dependency-name: actions/download-artifact
  dependency-version: '8'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-02-26 22:52:54 +00:00
CrazyMax
14b5eee617 move to nodenext and simplify TS/ESM config
Signed-off-by: CrazyMax <1951866+crazy-max@users.noreply.github.com>
2026-02-26 23:50:31 +01:00
CrazyMax
fa21647770 switch from Jest to Vitest
Signed-off-by: CrazyMax <1951866+crazy-max@users.noreply.github.com>
2026-02-26 23:50:31 +01:00
CrazyMax
c3c1213116 Merge pull request #983 from docker/dependabot/npm_and_yarn/fast-xml-parser-5.3.6
build(deps): bump fast-xml-parser from 5.3.4 to 5.3.6
2026-02-26 10:39:01 +01:00
CrazyMax
5d1e3079eb Merge pull request #976 from docker/dependabot/npm_and_yarn/isaacs/brace-expansion-5.0.1
build(deps): bump @isaacs/brace-expansion from 5.0.0 to 5.0.1
2026-02-26 10:38:26 +01:00
CrazyMax
ce0510c77f Merge pull request #990 from crazy-max/update-artifact-toolkit
bump @actions/artifact from 5.0.3 to 6.2.0
2026-02-26 10:37:40 +01:00
CrazyMax
c21ad821b8 ci: disable summary for test-coverage build
Signed-off-by: CrazyMax <1951866+crazy-max@users.noreply.github.com>
2026-02-26 09:39:03 +01:00
CrazyMax
5e783cc801 github: use default client and skip archive when uploading artifact
Signed-off-by: CrazyMax <1951866+crazy-max@users.noreply.github.com>
2026-02-26 09:39:03 +01:00
CrazyMax
03628ab393 map @actions/artifact to real entrypoint in Jest configs
Signed-off-by: CrazyMax <1951866+crazy-max@users.noreply.github.com>
2026-02-26 09:32:42 +01:00
CrazyMax
f0766fff61 bump @actions/artifact from 5.0.3 to 6.2.0
Signed-off-by: CrazyMax <1951866+crazy-max@users.noreply.github.com>
2026-02-26 09:06:47 +01:00
CrazyMax
dee27d76a2 Merge pull request #988 from crazy-max/update-buildx-buildkit
update buildkit to 0.28.0-rc1 and buildx to 0.32.0-rc1
2026-02-25 09:47:23 +01:00
CrazyMax
f96fcb3238 update buildkit to 0.28.0-rc1 and buildx to 0.32.0-rc1
Signed-off-by: CrazyMax <1951866+crazy-max@users.noreply.github.com>
2026-02-25 09:35:14 +01:00
dependabot[bot]
91e04f6b63 build(deps): bump @isaacs/brace-expansion from 5.0.0 to 5.0.1
Bumps @isaacs/brace-expansion from 5.0.0 to 5.0.1.

---
updated-dependencies:
- dependency-name: "@isaacs/brace-expansion"
  dependency-version: 5.0.1
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-02-25 08:30:15 +00:00
CrazyMax
56778fba0b Merge pull request #987 from docker/bot/buildx-releases-json
Update `.github/buildx-releases.json`
2026-02-25 09:29:31 +01:00
crazy-max
62ceaab8d4 github: update .github/buildx-releases.json
Signed-off-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-02-25 08:28:34 +00:00
CrazyMax
18925ea1d8 Merge pull request #986 from docker/bot/compose-releases-json
Update `.github/compose-releases.json`
2026-02-25 09:28:00 +01:00
CrazyMax
b46fe214a0 Merge pull request #985 from docker/bot/regclient-releases-json
Update `.github/regclient-releases.json`
2026-02-25 09:27:40 +01:00
CrazyMax
d5f2e23c86 Merge pull request #984 from docker/bot/cosign-releases-json
Update `.github/cosign-releases.json`
2026-02-25 09:27:23 +01:00
crazy-max
757ec820d8 github: update .github/compose-releases.json
Signed-off-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-02-25 00:50:06 +00:00
crazy-max
bfed47a87c github: update .github/regclient-releases.json
Signed-off-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-02-24 00:17:23 +00:00
crazy-max
142e6ec554 github: update .github/cosign-releases.json
Signed-off-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-02-20 00:15:40 +00:00
dependabot[bot]
4d312a45da build(deps): bump fast-xml-parser from 5.3.4 to 5.3.6
Bumps [fast-xml-parser](https://github.com/NaturalIntelligence/fast-xml-parser) from 5.3.4 to 5.3.6.
- [Release notes](https://github.com/NaturalIntelligence/fast-xml-parser/releases)
- [Changelog](https://github.com/NaturalIntelligence/fast-xml-parser/blob/master/CHANGELOG.md)
- [Commits](https://github.com/NaturalIntelligence/fast-xml-parser/compare/v5.3.4...v5.3.6)

---
updated-dependencies:
- dependency-name: fast-xml-parser
  dependency-version: 5.3.6
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-02-18 05:44:42 +00:00
CrazyMax
3d7c390e08 Merge pull request #980 from docker/bot/buildx-lab-releases-json
Update `.github/buildx-lab-releases.json`
2026-02-11 19:49:26 +01:00
crazy-max
bb7f6204cb github: update .github/buildx-lab-releases.json
Signed-off-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-02-11 18:43:32 +00:00
CrazyMax
517b797fc8 Merge pull request #978 from docker/dependabot/npm_and_yarn/semver-7.7.4
build(deps): bump semver from 7.7.3 to 7.7.4
2026-02-10 17:02:21 +01:00
CrazyMax
c6c363b02a Merge pull request #979 from crazy-max/git-auth-token-domain
buildx(build): handle domain when checking git auth token secret
2026-02-10 15:42:33 +01:00
CrazyMax
c790a5b549 buildx(build): handle domain when checking git auth token secret
Signed-off-by: CrazyMax <1951866+crazy-max@users.noreply.github.com>
2026-02-09 17:18:52 +01:00
dependabot[bot]
148117ec54 build(deps): bump semver from 7.7.3 to 7.7.4
Bumps [semver](https://github.com/npm/node-semver) from 7.7.3 to 7.7.4.
- [Release notes](https://github.com/npm/node-semver/releases)
- [Changelog](https://github.com/npm/node-semver/blob/main/CHANGELOG.md)
- [Commits](https://github.com/npm/node-semver/compare/v7.7.3...v7.7.4)

---
updated-dependencies:
- dependency-name: semver
  dependency-version: 7.7.4
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-02-05 22:54:10 +00:00
CrazyMax
57aacc319c Merge pull request #977 from crazy-max/github-split
github: move artifact and summary logic to dedicated classes
2026-02-05 13:42:13 +01:00
CrazyMax
e169fb346d github: move artifact and summary logic to dedicated classes
Signed-off-by: CrazyMax <1951866+crazy-max@users.noreply.github.com>
2026-02-05 13:31:13 +01:00
CrazyMax
4748d57f98 Merge pull request #974 from crazy-max/vendor-isghes
github: vendor isGhes() func from @actions/artifact module
2026-02-03 17:30:01 +01:00
CrazyMax
61eb950122 Merge pull request #975 from docker/bot/docker-releases-json
Update `.github/docker-releases.json`
2026-02-03 17:02:20 +01:00
crazy-max
ceba4f1fba github: update .github/docker-releases.json
Signed-off-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-02-03 00:44:11 +00:00
CrazyMax
386d77d22d github: vendor isGhes() func from @actions/artifact module
Signed-off-by: CrazyMax <1951866+crazy-max@users.noreply.github.com>
2026-02-02 17:58:09 +01:00
CrazyMax
3cd1a9db9b Merge pull request #973 from docker/dependabot/npm_and_yarn/fast-xml-parser-5.3.4
build(deps): bump fast-xml-parser from 5.3.3 to 5.3.4
2026-01-31 01:19:16 +01:00
dependabot[bot]
b4a6b692a6 build(deps): bump fast-xml-parser from 5.3.3 to 5.3.4
Bumps [fast-xml-parser](https://github.com/NaturalIntelligence/fast-xml-parser) from 5.3.3 to 5.3.4.
- [Release notes](https://github.com/NaturalIntelligence/fast-xml-parser/releases)
- [Changelog](https://github.com/NaturalIntelligence/fast-xml-parser/blob/master/CHANGELOG.md)
- [Commits](https://github.com/NaturalIntelligence/fast-xml-parser/compare/v5.3.3...v5.3.4)

---
updated-dependencies:
- dependency-name: fast-xml-parser
  dependency-version: 5.3.4
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-01-30 23:28:48 +00:00
CrazyMax
0484ca443a Merge pull request #971 from docker/dependabot/npm_and_yarn/actions/cache-6.0.0
build(deps): bump @actions/cache from 5.0.5 to 6.0.0
2026-01-30 11:46:06 +01:00
CrazyMax
37d8063bad align @azure/storage-blob version with @action/cache
Signed-off-by: CrazyMax <1951866+crazy-max@users.noreply.github.com>
2026-01-30 11:04:15 +01:00
CrazyMax
7878bd5132 map @actions/glob to real entrypoint in Jest configs
Signed-off-by: CrazyMax <1951866+crazy-max@users.noreply.github.com>
2026-01-30 11:04:15 +01:00
CrazyMax
4d959f4dfa map @actions/cache to real entrypoint in Jest configs
Signed-off-by: CrazyMax <1951866+crazy-max@users.noreply.github.com>
2026-01-30 10:57:24 +01:00
dependabot[bot]
46e9ae7c00 build(deps): bump @actions/cache from 5.0.5 to 6.0.0
Bumps [@actions/cache](https://github.com/actions/toolkit/tree/HEAD/packages/cache) from 5.0.5 to 6.0.0.
- [Changelog](https://github.com/actions/toolkit/blob/main/packages/cache/RELEASES.md)
- [Commits](https://github.com/actions/toolkit/commits/HEAD/packages/cache)

---
updated-dependencies:
- dependency-name: "@actions/cache"
  dependency-version: 6.0.0
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-01-29 23:49:58 +00:00
CrazyMax
a8558c570f Merge pull request #969 from docker/dependabot/npm_and_yarn/actions/tool-cache-4.0.0
build(deps): bump @actions/tool-cache from 3.0.1 to 4.0.0
2026-01-30 00:47:45 +01:00
CrazyMax
0def5befd0 map @actions/tool-cache to real entrypoint in Jest configs
Signed-off-by: CrazyMax <1951866+crazy-max@users.noreply.github.com>
2026-01-30 00:43:29 +01:00
dependabot[bot]
195f819e18 build(deps): bump @actions/tool-cache from 3.0.1 to 4.0.0
Bumps [@actions/tool-cache](https://github.com/actions/toolkit/tree/HEAD/packages/tool-cache) from 3.0.1 to 4.0.0.
- [Changelog](https://github.com/actions/toolkit/blob/main/packages/tool-cache/RELEASES.md)
- [Commits](https://github.com/actions/toolkit/commits/@actions/cache@4.0.0/packages/tool-cache)

---
updated-dependencies:
- dependency-name: "@actions/tool-cache"
  dependency-version: 4.0.0
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-01-29 22:13:42 +00:00
CrazyMax
abcde0b72d Merge pull request #970 from docker/dependabot/npm_and_yarn/actions/core-3.0.0
build(deps): bump @actions/core from 2.0.3 to 3.0.0
2026-01-29 23:11:24 +01:00
CrazyMax
539653d6fd map @actions/core to real entrypoint in Jest configs
Signed-off-by: CrazyMax <1951866+crazy-max@users.noreply.github.com>
2026-01-29 18:09:24 +01:00
dependabot[bot]
3ce99f0184 build(deps): bump @actions/core from 2.0.3 to 3.0.0
Bumps [@actions/core](https://github.com/actions/toolkit/tree/HEAD/packages/core) from 2.0.3 to 3.0.0.
- [Changelog](https://github.com/actions/toolkit/blob/main/packages/core/RELEASES.md)
- [Commits](https://github.com/actions/toolkit/commits/HEAD/packages/core)

---
updated-dependencies:
- dependency-name: "@actions/core"
  dependency-version: 3.0.0
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-01-29 17:05:40 +00:00
CrazyMax
cf27b7414a Merge pull request #929 from crazy-max/buildx-verify
buildx(install): use sigstore module to verify signature
2026-01-29 16:09:39 +01:00
CrazyMax
461be748b1 Merge pull request #967 from crazy-max/update-buildx-buildkit
update buildkit to 0.27.1 and buildx to 0.31.1
2026-01-29 13:42:16 +01:00
CrazyMax
7b49b8764b update buildkit to 0.27.1 and buildx to 0.31.1
Signed-off-by: CrazyMax <1951866+crazy-max@users.noreply.github.com>
2026-01-29 12:37:15 +01:00
CrazyMax
ddf4131723 Merge pull request #965 from docker/dependabot/npm_and_yarn/actions/http-client-4.0.0
build(deps): bump @actions/http-client from 3.0.2 to 4.0.0
2026-01-29 10:05:26 +01:00
CrazyMax
37a6f26c7e map @actions/http-client to real entrypoint in Jest configs
Signed-off-by: CrazyMax <1951866+crazy-max@users.noreply.github.com>
2026-01-29 10:00:11 +01:00
dependabot[bot]
958f42fe37 build(deps): bump @actions/http-client from 3.0.2 to 4.0.0
Bumps [@actions/http-client](https://github.com/actions/toolkit/tree/HEAD/packages/http-client) from 3.0.2 to 4.0.0.
- [Changelog](https://github.com/actions/toolkit/blob/main/packages/http-client/RELEASES.md)
- [Commits](https://github.com/actions/toolkit/commits/@actions/cache@4.0.0/packages/http-client)

---
updated-dependencies:
- dependency-name: "@actions/http-client"
  dependency-version: 4.0.0
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-01-29 08:58:29 +00:00
CrazyMax
dfebb2fe55 Merge pull request #966 from docker/bot/buildx-releases-json
Update `.github/buildx-releases.json`
2026-01-29 09:56:14 +01:00
crazy-max
e3c69a214e github: update .github/buildx-releases.json
Signed-off-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-01-29 08:55:09 +00:00
CrazyMax
a1b45a7b5f Merge pull request #963 from docker/dependabot/npm_and_yarn/actions/exec-3.0.0
build(deps): bump @actions/exec from 2.0.0 to 3.0.0
2026-01-29 09:54:46 +01:00
CrazyMax
b7c282e16f map @actions/exec to real entrypoint in Jest configs
Signed-off-by: CrazyMax <1951866+crazy-max@users.noreply.github.com>
2026-01-29 09:46:56 +01:00
dependabot[bot]
2ecd0682d0 build(deps): bump @actions/exec from 2.0.0 to 3.0.0
Bumps [@actions/exec](https://github.com/actions/toolkit/tree/HEAD/packages/exec) from 2.0.0 to 3.0.0.
- [Changelog](https://github.com/actions/toolkit/blob/main/packages/exec/RELEASES.md)
- [Commits](https://github.com/actions/toolkit/commits/HEAD/packages/exec)

---
updated-dependencies:
- dependency-name: "@actions/exec"
  dependency-version: 3.0.0
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-01-29 00:14:21 +00:00
CrazyMax
ac634d2f0a Merge pull request #964 from docker/dependabot/npm_and_yarn/actions/io-3.0.2
build(deps): bump @actions/io from 2.0.0 to 3.0.2
2026-01-29 01:12:27 +01:00
CrazyMax
72bdaca3a5 map @actions/io to real entrypoint in Jest configs
Signed-off-by: CrazyMax <1951866+crazy-max@users.noreply.github.com>
2026-01-29 01:03:38 +01:00
dependabot[bot]
13ca90c5d0 build(deps): bump @actions/io from 2.0.0 to 3.0.2
Bumps [@actions/io](https://github.com/actions/toolkit/tree/HEAD/packages/io) from 2.0.0 to 3.0.2.
- [Changelog](https://github.com/actions/toolkit/blob/main/packages/io/RELEASES.md)
- [Commits](https://github.com/actions/toolkit/commits/HEAD/packages/io)

---
updated-dependencies:
- dependency-name: "@actions/io"
  dependency-version: 3.0.2
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-01-28 22:54:18 +00:00
CrazyMax
17e08b98a8 sigstore: verifyArtifact func to verify arbitrary artifact
Signed-off-by: CrazyMax <1951866+crazy-max@users.noreply.github.com>
2026-01-28 17:25:57 +01:00
CrazyMax
89e14b0d85 buildx(install): workaround to check subjectAlternativeName
Signed-off-by: CrazyMax <1951866+crazy-max@users.noreply.github.com>
2026-01-28 17:24:22 +01:00
CrazyMax
d830716b30 buildx(install): use sigstore module to verify signature
Signed-off-by: CrazyMax <1951866+crazy-max@users.noreply.github.com>
2026-01-28 17:24:21 +01:00
CrazyMax
0969a99659 Merge pull request #960 from docker/dependabot/npm_and_yarn/actions/github-9.0.0
build(deps): bump @actions/github from 7.0.0 to 9.0.0
2026-01-28 17:17:44 +01:00
CrazyMax
ae6b2a8dc9 add repoData API test with per-test mock
Signed-off-by: CrazyMax <1951866+crazy-max@users.noreply.github.com>
2026-01-28 16:35:15 +01:00
CrazyMax
537174131a replace direct octokit deps with @actions/github types
Signed-off-by: CrazyMax <1951866+crazy-max@users.noreply.github.com>
2026-01-28 16:29:39 +01:00
CrazyMax
2806b0ceaf map @actions/github to real entrypoint in Jest configs
Signed-off-by: CrazyMax <1951866+crazy-max@users.noreply.github.com>
2026-01-28 15:31:33 +01:00
CrazyMax
466f0611ff let ts-jest transform JS and allow JS in tests
Signed-off-by: CrazyMax <1951866+crazy-max@users.noreply.github.com>
2026-01-28 15:06:20 +01:00
CrazyMax
13d565c67f transform ESM octokit deps during tests
Signed-off-by: CrazyMax <1951866+crazy-max@users.noreply.github.com>
2026-01-28 14:48:37 +01:00
CrazyMax
4fefc18a15 align octokit modules version with @actions/github v9
Signed-off-by: CrazyMax <1951866+crazy-max@users.noreply.github.com>
2026-01-28 14:24:01 +01:00
dependabot[bot]
66d355cbed build(deps): bump @actions/github from 7.0.0 to 9.0.0
Bumps [@actions/github](https://github.com/actions/toolkit/tree/HEAD/packages/github) from 7.0.0 to 9.0.0.
- [Changelog](https://github.com/actions/toolkit/blob/main/packages/github/RELEASES.md)
- [Commits](https://github.com/actions/toolkit/commits/HEAD/packages/github)

---
updated-dependencies:
- dependency-name: "@actions/github"
  dependency-version: 9.0.0
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-01-28 13:21:41 +00:00
CrazyMax
06cdb9490a Merge pull request #961 from crazy-max/esm
switch to ESM and update config/test wiring
2026-01-28 14:19:10 +01:00
CrazyMax
2617546094 github: derive summary table types from core API
Signed-off-by: CrazyMax <1951866+crazy-max@users.noreply.github.com>
2026-01-28 12:16:41 +01:00
CrazyMax
9348f81855 git: drop types/git and inline GitHub context type
Signed-off-by: CrazyMax <1951866+crazy-max@users.noreply.github.com>
2026-01-28 12:16:40 +01:00
CrazyMax
3f7be6d97d add ESM-safe os test helpers and tsconfig for tests
Signed-off-by: CrazyMax <1951866+crazy-max@users.noreply.github.com>
2026-01-28 11:52:41 +01:00
CrazyMax
8a49a6ea9c remove the mapper entry for csv-parse in jest config
Signed-off-by: CrazyMax <1951866+crazy-max@users.noreply.github.com>
2026-01-28 10:52:08 +01:00
CrazyMax
faa5b5bf22 switch to ESM and update config/test wiring
Signed-off-by: CrazyMax <1951866+crazy-max@users.noreply.github.com>
2026-01-28 10:35:34 +01:00
CrazyMax
f64486ace9 Merge pull request #959 from docker/dependabot/npm_and_yarn/actions/artifact-5.0.3
build(deps): bump @actions/artifact from 5.0.2 to 5.0.3
2026-01-28 10:14:43 +01:00
dependabot[bot]
dd7585591e build(deps): bump @actions/artifact from 5.0.2 to 5.0.3
Bumps [@actions/artifact](https://github.com/actions/toolkit/tree/HEAD/packages/artifact) from 5.0.2 to 5.0.3.
- [Changelog](https://github.com/actions/toolkit/blob/main/packages/artifact/RELEASES.md)
- [Commits](https://github.com/actions/toolkit/commits/HEAD/packages/artifact)

---
updated-dependencies:
- dependency-name: "@actions/artifact"
  dependency-version: 5.0.3
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-01-28 09:04:56 +00:00
CrazyMax
e278a8ff7f Merge pull request #956 from docker/dependabot/npm_and_yarn/actions/cache-5.0.5
build(deps): bump @actions/cache from 5.0.3 to 5.0.5
2026-01-28 09:58:50 +01:00
dependabot[bot]
a8f3950008 build(deps): bump @actions/cache from 5.0.3 to 5.0.5
Bumps [@actions/cache](https://github.com/actions/toolkit/tree/HEAD/packages/cache) from 5.0.3 to 5.0.5.
- [Changelog](https://github.com/actions/toolkit/blob/main/packages/cache/RELEASES.md)
- [Commits](https://github.com/actions/toolkit/commits/HEAD/packages/cache)

---
updated-dependencies:
- dependency-name: "@actions/cache"
  dependency-version: 5.0.5
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-01-28 08:54:01 +00:00
CrazyMax
16a313e50b Merge pull request #958 from docker/dependabot/npm_and_yarn/actions/tool-cache-3.0.1
build(deps): bump @actions/tool-cache from 3.0.0 to 3.0.1
2026-01-28 09:53:16 +01:00
CrazyMax
f57515d812 Merge pull request #957 from docker/dependabot/npm_and_yarn/actions/core-2.0.3
build(deps): bump @actions/core from 2.0.2 to 2.0.3
2026-01-28 09:50:18 +01:00
dependabot[bot]
b2d68b3506 build(deps): bump @actions/core from 2.0.2 to 2.0.3
Bumps [@actions/core](https://github.com/actions/toolkit/tree/HEAD/packages/core) from 2.0.2 to 2.0.3.
- [Changelog](https://github.com/actions/toolkit/blob/main/packages/core/RELEASES.md)
- [Commits](https://github.com/actions/toolkit/commits/HEAD/packages/core)

---
updated-dependencies:
- dependency-name: "@actions/core"
  dependency-version: 2.0.3
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-01-28 08:43:15 +00:00
dependabot[bot]
6785818572 build(deps): bump @actions/tool-cache from 3.0.0 to 3.0.1
Bumps [@actions/tool-cache](https://github.com/actions/toolkit/tree/HEAD/packages/tool-cache) from 3.0.0 to 3.0.1.
- [Changelog](https://github.com/actions/toolkit/blob/main/packages/tool-cache/RELEASES.md)
- [Commits](https://github.com/actions/toolkit/commits/HEAD/packages/tool-cache)

---
updated-dependencies:
- dependency-name: "@actions/tool-cache"
  dependency-version: 3.0.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-01-28 08:43:12 +00:00
CrazyMax
ac0e0b50d5 Merge pull request #955 from docker/dependabot/npm_and_yarn/actions/http-client-3.0.2
build(deps): bump @actions/http-client from 3.0.1 to 3.0.2
2026-01-28 09:41:06 +01:00
dependabot[bot]
20a43cb510 build(deps): bump @actions/http-client from 3.0.1 to 3.0.2
Bumps [@actions/http-client](https://github.com/actions/toolkit/tree/HEAD/packages/http-client) from 3.0.1 to 3.0.2.
- [Changelog](https://github.com/actions/toolkit/blob/main/packages/http-client/RELEASES.md)
- [Commits](https://github.com/actions/toolkit/commits/HEAD/packages/http-client)

---
updated-dependencies:
- dependency-name: "@actions/http-client"
  dependency-version: 3.0.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-01-27 15:07:35 +00:00
136 changed files with 5108 additions and 8563 deletions

View File

@@ -1,61 +1,86 @@
{
"latest": {
"id": 269523829,
"tag_name": "v0.30.1-desktop.2",
"html_url": "https://github.com/docker/buildx-desktop/releases/tag/v0.30.1-desktop.2",
"id": 285373366,
"tag_name": "v0.31.1-desktop.1",
"html_url": "https://github.com/docker/buildx-desktop/releases/tag/v0.31.1-desktop.1",
"assets": [
"https://github.com/docker/buildx-desktop/releases/download/v0.30.1-desktop.2/buildx-v0.30.1-desktop.2.darwin-amd64",
"https://github.com/docker/buildx-desktop/releases/download/v0.30.1-desktop.2/buildx-v0.30.1-desktop.2.darwin-amd64.provenance.json",
"https://github.com/docker/buildx-desktop/releases/download/v0.30.1-desktop.2/buildx-v0.30.1-desktop.2.darwin-amd64.sbom.json",
"https://github.com/docker/buildx-desktop/releases/download/v0.30.1-desktop.2/buildx-v0.30.1-desktop.2.darwin-arm64",
"https://github.com/docker/buildx-desktop/releases/download/v0.30.1-desktop.2/buildx-v0.30.1-desktop.2.darwin-arm64.provenance.json",
"https://github.com/docker/buildx-desktop/releases/download/v0.30.1-desktop.2/buildx-v0.30.1-desktop.2.darwin-arm64.sbom.json",
"https://github.com/docker/buildx-desktop/releases/download/v0.30.1-desktop.2/buildx-v0.30.1-desktop.2.freebsd-amd64",
"https://github.com/docker/buildx-desktop/releases/download/v0.30.1-desktop.2/buildx-v0.30.1-desktop.2.freebsd-amd64.provenance.json",
"https://github.com/docker/buildx-desktop/releases/download/v0.30.1-desktop.2/buildx-v0.30.1-desktop.2.freebsd-amd64.sbom.json",
"https://github.com/docker/buildx-desktop/releases/download/v0.30.1-desktop.2/buildx-v0.30.1-desktop.2.freebsd-arm64",
"https://github.com/docker/buildx-desktop/releases/download/v0.30.1-desktop.2/buildx-v0.30.1-desktop.2.freebsd-arm64.provenance.json",
"https://github.com/docker/buildx-desktop/releases/download/v0.30.1-desktop.2/buildx-v0.30.1-desktop.2.freebsd-arm64.sbom.json",
"https://github.com/docker/buildx-desktop/releases/download/v0.30.1-desktop.2/buildx-v0.30.1-desktop.2.linux-amd64",
"https://github.com/docker/buildx-desktop/releases/download/v0.30.1-desktop.2/buildx-v0.30.1-desktop.2.linux-amd64.provenance.json",
"https://github.com/docker/buildx-desktop/releases/download/v0.30.1-desktop.2/buildx-v0.30.1-desktop.2.linux-amd64.sbom.json",
"https://github.com/docker/buildx-desktop/releases/download/v0.30.1-desktop.2/buildx-v0.30.1-desktop.2.linux-arm-v6",
"https://github.com/docker/buildx-desktop/releases/download/v0.30.1-desktop.2/buildx-v0.30.1-desktop.2.linux-arm-v6.provenance.json",
"https://github.com/docker/buildx-desktop/releases/download/v0.30.1-desktop.2/buildx-v0.30.1-desktop.2.linux-arm-v6.sbom.json",
"https://github.com/docker/buildx-desktop/releases/download/v0.30.1-desktop.2/buildx-v0.30.1-desktop.2.linux-arm-v7",
"https://github.com/docker/buildx-desktop/releases/download/v0.30.1-desktop.2/buildx-v0.30.1-desktop.2.linux-arm-v7.provenance.json",
"https://github.com/docker/buildx-desktop/releases/download/v0.30.1-desktop.2/buildx-v0.30.1-desktop.2.linux-arm-v7.sbom.json",
"https://github.com/docker/buildx-desktop/releases/download/v0.30.1-desktop.2/buildx-v0.30.1-desktop.2.linux-arm64",
"https://github.com/docker/buildx-desktop/releases/download/v0.30.1-desktop.2/buildx-v0.30.1-desktop.2.linux-arm64.provenance.json",
"https://github.com/docker/buildx-desktop/releases/download/v0.30.1-desktop.2/buildx-v0.30.1-desktop.2.linux-arm64.sbom.json",
"https://github.com/docker/buildx-desktop/releases/download/v0.30.1-desktop.2/buildx-v0.30.1-desktop.2.linux-ppc64le",
"https://github.com/docker/buildx-desktop/releases/download/v0.30.1-desktop.2/buildx-v0.30.1-desktop.2.linux-ppc64le.provenance.json",
"https://github.com/docker/buildx-desktop/releases/download/v0.30.1-desktop.2/buildx-v0.30.1-desktop.2.linux-ppc64le.sbom.json",
"https://github.com/docker/buildx-desktop/releases/download/v0.30.1-desktop.2/buildx-v0.30.1-desktop.2.linux-riscv64",
"https://github.com/docker/buildx-desktop/releases/download/v0.30.1-desktop.2/buildx-v0.30.1-desktop.2.linux-riscv64.provenance.json",
"https://github.com/docker/buildx-desktop/releases/download/v0.30.1-desktop.2/buildx-v0.30.1-desktop.2.linux-riscv64.sbom.json",
"https://github.com/docker/buildx-desktop/releases/download/v0.30.1-desktop.2/buildx-v0.30.1-desktop.2.linux-s390x",
"https://github.com/docker/buildx-desktop/releases/download/v0.30.1-desktop.2/buildx-v0.30.1-desktop.2.linux-s390x.provenance.json",
"https://github.com/docker/buildx-desktop/releases/download/v0.30.1-desktop.2/buildx-v0.30.1-desktop.2.linux-s390x.sbom.json",
"https://github.com/docker/buildx-desktop/releases/download/v0.30.1-desktop.2/buildx-v0.30.1-desktop.2.netbsd-amd64",
"https://github.com/docker/buildx-desktop/releases/download/v0.30.1-desktop.2/buildx-v0.30.1-desktop.2.netbsd-amd64.provenance.json",
"https://github.com/docker/buildx-desktop/releases/download/v0.30.1-desktop.2/buildx-v0.30.1-desktop.2.netbsd-amd64.sbom.json",
"https://github.com/docker/buildx-desktop/releases/download/v0.30.1-desktop.2/buildx-v0.30.1-desktop.2.netbsd-arm64",
"https://github.com/docker/buildx-desktop/releases/download/v0.30.1-desktop.2/buildx-v0.30.1-desktop.2.netbsd-arm64.provenance.json",
"https://github.com/docker/buildx-desktop/releases/download/v0.30.1-desktop.2/buildx-v0.30.1-desktop.2.netbsd-arm64.sbom.json",
"https://github.com/docker/buildx-desktop/releases/download/v0.30.1-desktop.2/buildx-v0.30.1-desktop.2.openbsd-amd64",
"https://github.com/docker/buildx-desktop/releases/download/v0.30.1-desktop.2/buildx-v0.30.1-desktop.2.openbsd-amd64.provenance.json",
"https://github.com/docker/buildx-desktop/releases/download/v0.30.1-desktop.2/buildx-v0.30.1-desktop.2.openbsd-amd64.sbom.json",
"https://github.com/docker/buildx-desktop/releases/download/v0.30.1-desktop.2/buildx-v0.30.1-desktop.2.openbsd-arm64",
"https://github.com/docker/buildx-desktop/releases/download/v0.30.1-desktop.2/buildx-v0.30.1-desktop.2.openbsd-arm64.provenance.json",
"https://github.com/docker/buildx-desktop/releases/download/v0.30.1-desktop.2/buildx-v0.30.1-desktop.2.openbsd-arm64.sbom.json",
"https://github.com/docker/buildx-desktop/releases/download/v0.30.1-desktop.2/buildx-v0.30.1-desktop.2.windows-amd64.exe",
"https://github.com/docker/buildx-desktop/releases/download/v0.30.1-desktop.2/buildx-v0.30.1-desktop.2.windows-amd64.provenance.json",
"https://github.com/docker/buildx-desktop/releases/download/v0.30.1-desktop.2/buildx-v0.30.1-desktop.2.windows-amd64.sbom.json",
"https://github.com/docker/buildx-desktop/releases/download/v0.30.1-desktop.2/buildx-v0.30.1-desktop.2.windows-arm64.exe",
"https://github.com/docker/buildx-desktop/releases/download/v0.30.1-desktop.2/buildx-v0.30.1-desktop.2.windows-arm64.provenance.json",
"https://github.com/docker/buildx-desktop/releases/download/v0.30.1-desktop.2/buildx-v0.30.1-desktop.2.windows-arm64.sbom.json",
"https://github.com/docker/buildx-desktop/releases/download/v0.30.1-desktop.2/checksums.txt"
"https://github.com/docker/buildx-desktop/releases/download/v0.31.1-desktop.1/buildx-v0.31.1-desktop.1.darwin-amd64",
"https://github.com/docker/buildx-desktop/releases/download/v0.31.1-desktop.1/buildx-v0.31.1-desktop.1.darwin-amd64.sbom.json",
"https://github.com/docker/buildx-desktop/releases/download/v0.31.1-desktop.1/buildx-v0.31.1-desktop.1.darwin-arm64",
"https://github.com/docker/buildx-desktop/releases/download/v0.31.1-desktop.1/buildx-v0.31.1-desktop.1.darwin-arm64.sbom.json",
"https://github.com/docker/buildx-desktop/releases/download/v0.31.1-desktop.1/buildx-v0.31.1-desktop.1.freebsd-amd64",
"https://github.com/docker/buildx-desktop/releases/download/v0.31.1-desktop.1/buildx-v0.31.1-desktop.1.freebsd-amd64.sbom.json",
"https://github.com/docker/buildx-desktop/releases/download/v0.31.1-desktop.1/buildx-v0.31.1-desktop.1.freebsd-arm64",
"https://github.com/docker/buildx-desktop/releases/download/v0.31.1-desktop.1/buildx-v0.31.1-desktop.1.freebsd-arm64.sbom.json",
"https://github.com/docker/buildx-desktop/releases/download/v0.31.1-desktop.1/buildx-v0.31.1-desktop.1.linux-amd64",
"https://github.com/docker/buildx-desktop/releases/download/v0.31.1-desktop.1/buildx-v0.31.1-desktop.1.linux-amd64.sbom.json",
"https://github.com/docker/buildx-desktop/releases/download/v0.31.1-desktop.1/buildx-v0.31.1-desktop.1.linux-arm-v6",
"https://github.com/docker/buildx-desktop/releases/download/v0.31.1-desktop.1/buildx-v0.31.1-desktop.1.linux-arm-v6.sbom.json",
"https://github.com/docker/buildx-desktop/releases/download/v0.31.1-desktop.1/buildx-v0.31.1-desktop.1.linux-arm-v7",
"https://github.com/docker/buildx-desktop/releases/download/v0.31.1-desktop.1/buildx-v0.31.1-desktop.1.linux-arm-v7.sbom.json",
"https://github.com/docker/buildx-desktop/releases/download/v0.31.1-desktop.1/buildx-v0.31.1-desktop.1.linux-arm64",
"https://github.com/docker/buildx-desktop/releases/download/v0.31.1-desktop.1/buildx-v0.31.1-desktop.1.linux-arm64.sbom.json",
"https://github.com/docker/buildx-desktop/releases/download/v0.31.1-desktop.1/buildx-v0.31.1-desktop.1.linux-ppc64le",
"https://github.com/docker/buildx-desktop/releases/download/v0.31.1-desktop.1/buildx-v0.31.1-desktop.1.linux-ppc64le.sbom.json",
"https://github.com/docker/buildx-desktop/releases/download/v0.31.1-desktop.1/buildx-v0.31.1-desktop.1.linux-riscv64",
"https://github.com/docker/buildx-desktop/releases/download/v0.31.1-desktop.1/buildx-v0.31.1-desktop.1.linux-riscv64.sbom.json",
"https://github.com/docker/buildx-desktop/releases/download/v0.31.1-desktop.1/buildx-v0.31.1-desktop.1.linux-s390x",
"https://github.com/docker/buildx-desktop/releases/download/v0.31.1-desktop.1/buildx-v0.31.1-desktop.1.linux-s390x.sbom.json",
"https://github.com/docker/buildx-desktop/releases/download/v0.31.1-desktop.1/buildx-v0.31.1-desktop.1.netbsd-amd64",
"https://github.com/docker/buildx-desktop/releases/download/v0.31.1-desktop.1/buildx-v0.31.1-desktop.1.netbsd-amd64.sbom.json",
"https://github.com/docker/buildx-desktop/releases/download/v0.31.1-desktop.1/buildx-v0.31.1-desktop.1.netbsd-arm64",
"https://github.com/docker/buildx-desktop/releases/download/v0.31.1-desktop.1/buildx-v0.31.1-desktop.1.netbsd-arm64.sbom.json",
"https://github.com/docker/buildx-desktop/releases/download/v0.31.1-desktop.1/buildx-v0.31.1-desktop.1.openbsd-amd64",
"https://github.com/docker/buildx-desktop/releases/download/v0.31.1-desktop.1/buildx-v0.31.1-desktop.1.openbsd-amd64.sbom.json",
"https://github.com/docker/buildx-desktop/releases/download/v0.31.1-desktop.1/buildx-v0.31.1-desktop.1.openbsd-arm64",
"https://github.com/docker/buildx-desktop/releases/download/v0.31.1-desktop.1/buildx-v0.31.1-desktop.1.openbsd-arm64.sbom.json",
"https://github.com/docker/buildx-desktop/releases/download/v0.31.1-desktop.1/buildx-v0.31.1-desktop.1.windows-amd64.exe",
"https://github.com/docker/buildx-desktop/releases/download/v0.31.1-desktop.1/buildx-v0.31.1-desktop.1.windows-amd64.sbom.json",
"https://github.com/docker/buildx-desktop/releases/download/v0.31.1-desktop.1/buildx-v0.31.1-desktop.1.windows-arm64.exe",
"https://github.com/docker/buildx-desktop/releases/download/v0.31.1-desktop.1/buildx-v0.31.1-desktop.1.windows-arm64.sbom.json",
"https://github.com/docker/buildx-desktop/releases/download/v0.31.1-desktop.1/checksums.txt"
]
},
"v0.31.1-desktop.1": {
"id": 285373366,
"tag_name": "v0.31.1-desktop.1",
"html_url": "https://github.com/docker/buildx-desktop/releases/tag/v0.31.1-desktop.1",
"assets": [
"https://github.com/docker/buildx-desktop/releases/download/v0.31.1-desktop.1/buildx-v0.31.1-desktop.1.darwin-amd64",
"https://github.com/docker/buildx-desktop/releases/download/v0.31.1-desktop.1/buildx-v0.31.1-desktop.1.darwin-amd64.sbom.json",
"https://github.com/docker/buildx-desktop/releases/download/v0.31.1-desktop.1/buildx-v0.31.1-desktop.1.darwin-arm64",
"https://github.com/docker/buildx-desktop/releases/download/v0.31.1-desktop.1/buildx-v0.31.1-desktop.1.darwin-arm64.sbom.json",
"https://github.com/docker/buildx-desktop/releases/download/v0.31.1-desktop.1/buildx-v0.31.1-desktop.1.freebsd-amd64",
"https://github.com/docker/buildx-desktop/releases/download/v0.31.1-desktop.1/buildx-v0.31.1-desktop.1.freebsd-amd64.sbom.json",
"https://github.com/docker/buildx-desktop/releases/download/v0.31.1-desktop.1/buildx-v0.31.1-desktop.1.freebsd-arm64",
"https://github.com/docker/buildx-desktop/releases/download/v0.31.1-desktop.1/buildx-v0.31.1-desktop.1.freebsd-arm64.sbom.json",
"https://github.com/docker/buildx-desktop/releases/download/v0.31.1-desktop.1/buildx-v0.31.1-desktop.1.linux-amd64",
"https://github.com/docker/buildx-desktop/releases/download/v0.31.1-desktop.1/buildx-v0.31.1-desktop.1.linux-amd64.sbom.json",
"https://github.com/docker/buildx-desktop/releases/download/v0.31.1-desktop.1/buildx-v0.31.1-desktop.1.linux-arm-v6",
"https://github.com/docker/buildx-desktop/releases/download/v0.31.1-desktop.1/buildx-v0.31.1-desktop.1.linux-arm-v6.sbom.json",
"https://github.com/docker/buildx-desktop/releases/download/v0.31.1-desktop.1/buildx-v0.31.1-desktop.1.linux-arm-v7",
"https://github.com/docker/buildx-desktop/releases/download/v0.31.1-desktop.1/buildx-v0.31.1-desktop.1.linux-arm-v7.sbom.json",
"https://github.com/docker/buildx-desktop/releases/download/v0.31.1-desktop.1/buildx-v0.31.1-desktop.1.linux-arm64",
"https://github.com/docker/buildx-desktop/releases/download/v0.31.1-desktop.1/buildx-v0.31.1-desktop.1.linux-arm64.sbom.json",
"https://github.com/docker/buildx-desktop/releases/download/v0.31.1-desktop.1/buildx-v0.31.1-desktop.1.linux-ppc64le",
"https://github.com/docker/buildx-desktop/releases/download/v0.31.1-desktop.1/buildx-v0.31.1-desktop.1.linux-ppc64le.sbom.json",
"https://github.com/docker/buildx-desktop/releases/download/v0.31.1-desktop.1/buildx-v0.31.1-desktop.1.linux-riscv64",
"https://github.com/docker/buildx-desktop/releases/download/v0.31.1-desktop.1/buildx-v0.31.1-desktop.1.linux-riscv64.sbom.json",
"https://github.com/docker/buildx-desktop/releases/download/v0.31.1-desktop.1/buildx-v0.31.1-desktop.1.linux-s390x",
"https://github.com/docker/buildx-desktop/releases/download/v0.31.1-desktop.1/buildx-v0.31.1-desktop.1.linux-s390x.sbom.json",
"https://github.com/docker/buildx-desktop/releases/download/v0.31.1-desktop.1/buildx-v0.31.1-desktop.1.netbsd-amd64",
"https://github.com/docker/buildx-desktop/releases/download/v0.31.1-desktop.1/buildx-v0.31.1-desktop.1.netbsd-amd64.sbom.json",
"https://github.com/docker/buildx-desktop/releases/download/v0.31.1-desktop.1/buildx-v0.31.1-desktop.1.netbsd-arm64",
"https://github.com/docker/buildx-desktop/releases/download/v0.31.1-desktop.1/buildx-v0.31.1-desktop.1.netbsd-arm64.sbom.json",
"https://github.com/docker/buildx-desktop/releases/download/v0.31.1-desktop.1/buildx-v0.31.1-desktop.1.openbsd-amd64",
"https://github.com/docker/buildx-desktop/releases/download/v0.31.1-desktop.1/buildx-v0.31.1-desktop.1.openbsd-amd64.sbom.json",
"https://github.com/docker/buildx-desktop/releases/download/v0.31.1-desktop.1/buildx-v0.31.1-desktop.1.openbsd-arm64",
"https://github.com/docker/buildx-desktop/releases/download/v0.31.1-desktop.1/buildx-v0.31.1-desktop.1.openbsd-arm64.sbom.json",
"https://github.com/docker/buildx-desktop/releases/download/v0.31.1-desktop.1/buildx-v0.31.1-desktop.1.windows-amd64.exe",
"https://github.com/docker/buildx-desktop/releases/download/v0.31.1-desktop.1/buildx-v0.31.1-desktop.1.windows-amd64.sbom.json",
"https://github.com/docker/buildx-desktop/releases/download/v0.31.1-desktop.1/buildx-v0.31.1-desktop.1.windows-arm64.exe",
"https://github.com/docker/buildx-desktop/releases/download/v0.31.1-desktop.1/buildx-v0.31.1-desktop.1.windows-arm64.sbom.json",
"https://github.com/docker/buildx-desktop/releases/download/v0.31.1-desktop.1/checksums.txt"
]
},
"v0.30.1-desktop.2": {
@@ -177,62 +202,45 @@
]
},
"edge": {
"id": 269523829,
"tag_name": "v0.30.1-desktop.2",
"html_url": "https://github.com/docker/buildx-desktop/releases/tag/v0.30.1-desktop.2",
"id": 285373366,
"tag_name": "v0.31.1-desktop.1",
"html_url": "https://github.com/docker/buildx-desktop/releases/tag/v0.31.1-desktop.1",
"assets": [
"https://github.com/docker/buildx-desktop/releases/download/v0.30.1-desktop.2/buildx-v0.30.1-desktop.2.darwin-amd64",
"https://github.com/docker/buildx-desktop/releases/download/v0.30.1-desktop.2/buildx-v0.30.1-desktop.2.darwin-amd64.provenance.json",
"https://github.com/docker/buildx-desktop/releases/download/v0.30.1-desktop.2/buildx-v0.30.1-desktop.2.darwin-amd64.sbom.json",
"https://github.com/docker/buildx-desktop/releases/download/v0.30.1-desktop.2/buildx-v0.30.1-desktop.2.darwin-arm64",
"https://github.com/docker/buildx-desktop/releases/download/v0.30.1-desktop.2/buildx-v0.30.1-desktop.2.darwin-arm64.provenance.json",
"https://github.com/docker/buildx-desktop/releases/download/v0.30.1-desktop.2/buildx-v0.30.1-desktop.2.darwin-arm64.sbom.json",
"https://github.com/docker/buildx-desktop/releases/download/v0.30.1-desktop.2/buildx-v0.30.1-desktop.2.freebsd-amd64",
"https://github.com/docker/buildx-desktop/releases/download/v0.30.1-desktop.2/buildx-v0.30.1-desktop.2.freebsd-amd64.provenance.json",
"https://github.com/docker/buildx-desktop/releases/download/v0.30.1-desktop.2/buildx-v0.30.1-desktop.2.freebsd-amd64.sbom.json",
"https://github.com/docker/buildx-desktop/releases/download/v0.30.1-desktop.2/buildx-v0.30.1-desktop.2.freebsd-arm64",
"https://github.com/docker/buildx-desktop/releases/download/v0.30.1-desktop.2/buildx-v0.30.1-desktop.2.freebsd-arm64.provenance.json",
"https://github.com/docker/buildx-desktop/releases/download/v0.30.1-desktop.2/buildx-v0.30.1-desktop.2.freebsd-arm64.sbom.json",
"https://github.com/docker/buildx-desktop/releases/download/v0.30.1-desktop.2/buildx-v0.30.1-desktop.2.linux-amd64",
"https://github.com/docker/buildx-desktop/releases/download/v0.30.1-desktop.2/buildx-v0.30.1-desktop.2.linux-amd64.provenance.json",
"https://github.com/docker/buildx-desktop/releases/download/v0.30.1-desktop.2/buildx-v0.30.1-desktop.2.linux-amd64.sbom.json",
"https://github.com/docker/buildx-desktop/releases/download/v0.30.1-desktop.2/buildx-v0.30.1-desktop.2.linux-arm-v6",
"https://github.com/docker/buildx-desktop/releases/download/v0.30.1-desktop.2/buildx-v0.30.1-desktop.2.linux-arm-v6.provenance.json",
"https://github.com/docker/buildx-desktop/releases/download/v0.30.1-desktop.2/buildx-v0.30.1-desktop.2.linux-arm-v6.sbom.json",
"https://github.com/docker/buildx-desktop/releases/download/v0.30.1-desktop.2/buildx-v0.30.1-desktop.2.linux-arm-v7",
"https://github.com/docker/buildx-desktop/releases/download/v0.30.1-desktop.2/buildx-v0.30.1-desktop.2.linux-arm-v7.provenance.json",
"https://github.com/docker/buildx-desktop/releases/download/v0.30.1-desktop.2/buildx-v0.30.1-desktop.2.linux-arm-v7.sbom.json",
"https://github.com/docker/buildx-desktop/releases/download/v0.30.1-desktop.2/buildx-v0.30.1-desktop.2.linux-arm64",
"https://github.com/docker/buildx-desktop/releases/download/v0.30.1-desktop.2/buildx-v0.30.1-desktop.2.linux-arm64.provenance.json",
"https://github.com/docker/buildx-desktop/releases/download/v0.30.1-desktop.2/buildx-v0.30.1-desktop.2.linux-arm64.sbom.json",
"https://github.com/docker/buildx-desktop/releases/download/v0.30.1-desktop.2/buildx-v0.30.1-desktop.2.linux-ppc64le",
"https://github.com/docker/buildx-desktop/releases/download/v0.30.1-desktop.2/buildx-v0.30.1-desktop.2.linux-ppc64le.provenance.json",
"https://github.com/docker/buildx-desktop/releases/download/v0.30.1-desktop.2/buildx-v0.30.1-desktop.2.linux-ppc64le.sbom.json",
"https://github.com/docker/buildx-desktop/releases/download/v0.30.1-desktop.2/buildx-v0.30.1-desktop.2.linux-riscv64",
"https://github.com/docker/buildx-desktop/releases/download/v0.30.1-desktop.2/buildx-v0.30.1-desktop.2.linux-riscv64.provenance.json",
"https://github.com/docker/buildx-desktop/releases/download/v0.30.1-desktop.2/buildx-v0.30.1-desktop.2.linux-riscv64.sbom.json",
"https://github.com/docker/buildx-desktop/releases/download/v0.30.1-desktop.2/buildx-v0.30.1-desktop.2.linux-s390x",
"https://github.com/docker/buildx-desktop/releases/download/v0.30.1-desktop.2/buildx-v0.30.1-desktop.2.linux-s390x.provenance.json",
"https://github.com/docker/buildx-desktop/releases/download/v0.30.1-desktop.2/buildx-v0.30.1-desktop.2.linux-s390x.sbom.json",
"https://github.com/docker/buildx-desktop/releases/download/v0.30.1-desktop.2/buildx-v0.30.1-desktop.2.netbsd-amd64",
"https://github.com/docker/buildx-desktop/releases/download/v0.30.1-desktop.2/buildx-v0.30.1-desktop.2.netbsd-amd64.provenance.json",
"https://github.com/docker/buildx-desktop/releases/download/v0.30.1-desktop.2/buildx-v0.30.1-desktop.2.netbsd-amd64.sbom.json",
"https://github.com/docker/buildx-desktop/releases/download/v0.30.1-desktop.2/buildx-v0.30.1-desktop.2.netbsd-arm64",
"https://github.com/docker/buildx-desktop/releases/download/v0.30.1-desktop.2/buildx-v0.30.1-desktop.2.netbsd-arm64.provenance.json",
"https://github.com/docker/buildx-desktop/releases/download/v0.30.1-desktop.2/buildx-v0.30.1-desktop.2.netbsd-arm64.sbom.json",
"https://github.com/docker/buildx-desktop/releases/download/v0.30.1-desktop.2/buildx-v0.30.1-desktop.2.openbsd-amd64",
"https://github.com/docker/buildx-desktop/releases/download/v0.30.1-desktop.2/buildx-v0.30.1-desktop.2.openbsd-amd64.provenance.json",
"https://github.com/docker/buildx-desktop/releases/download/v0.30.1-desktop.2/buildx-v0.30.1-desktop.2.openbsd-amd64.sbom.json",
"https://github.com/docker/buildx-desktop/releases/download/v0.30.1-desktop.2/buildx-v0.30.1-desktop.2.openbsd-arm64",
"https://github.com/docker/buildx-desktop/releases/download/v0.30.1-desktop.2/buildx-v0.30.1-desktop.2.openbsd-arm64.provenance.json",
"https://github.com/docker/buildx-desktop/releases/download/v0.30.1-desktop.2/buildx-v0.30.1-desktop.2.openbsd-arm64.sbom.json",
"https://github.com/docker/buildx-desktop/releases/download/v0.30.1-desktop.2/buildx-v0.30.1-desktop.2.windows-amd64.exe",
"https://github.com/docker/buildx-desktop/releases/download/v0.30.1-desktop.2/buildx-v0.30.1-desktop.2.windows-amd64.provenance.json",
"https://github.com/docker/buildx-desktop/releases/download/v0.30.1-desktop.2/buildx-v0.30.1-desktop.2.windows-amd64.sbom.json",
"https://github.com/docker/buildx-desktop/releases/download/v0.30.1-desktop.2/buildx-v0.30.1-desktop.2.windows-arm64.exe",
"https://github.com/docker/buildx-desktop/releases/download/v0.30.1-desktop.2/buildx-v0.30.1-desktop.2.windows-arm64.provenance.json",
"https://github.com/docker/buildx-desktop/releases/download/v0.30.1-desktop.2/buildx-v0.30.1-desktop.2.windows-arm64.sbom.json",
"https://github.com/docker/buildx-desktop/releases/download/v0.30.1-desktop.2/checksums.txt"
"https://github.com/docker/buildx-desktop/releases/download/v0.31.1-desktop.1/buildx-v0.31.1-desktop.1.darwin-amd64",
"https://github.com/docker/buildx-desktop/releases/download/v0.31.1-desktop.1/buildx-v0.31.1-desktop.1.darwin-amd64.sbom.json",
"https://github.com/docker/buildx-desktop/releases/download/v0.31.1-desktop.1/buildx-v0.31.1-desktop.1.darwin-arm64",
"https://github.com/docker/buildx-desktop/releases/download/v0.31.1-desktop.1/buildx-v0.31.1-desktop.1.darwin-arm64.sbom.json",
"https://github.com/docker/buildx-desktop/releases/download/v0.31.1-desktop.1/buildx-v0.31.1-desktop.1.freebsd-amd64",
"https://github.com/docker/buildx-desktop/releases/download/v0.31.1-desktop.1/buildx-v0.31.1-desktop.1.freebsd-amd64.sbom.json",
"https://github.com/docker/buildx-desktop/releases/download/v0.31.1-desktop.1/buildx-v0.31.1-desktop.1.freebsd-arm64",
"https://github.com/docker/buildx-desktop/releases/download/v0.31.1-desktop.1/buildx-v0.31.1-desktop.1.freebsd-arm64.sbom.json",
"https://github.com/docker/buildx-desktop/releases/download/v0.31.1-desktop.1/buildx-v0.31.1-desktop.1.linux-amd64",
"https://github.com/docker/buildx-desktop/releases/download/v0.31.1-desktop.1/buildx-v0.31.1-desktop.1.linux-amd64.sbom.json",
"https://github.com/docker/buildx-desktop/releases/download/v0.31.1-desktop.1/buildx-v0.31.1-desktop.1.linux-arm-v6",
"https://github.com/docker/buildx-desktop/releases/download/v0.31.1-desktop.1/buildx-v0.31.1-desktop.1.linux-arm-v6.sbom.json",
"https://github.com/docker/buildx-desktop/releases/download/v0.31.1-desktop.1/buildx-v0.31.1-desktop.1.linux-arm-v7",
"https://github.com/docker/buildx-desktop/releases/download/v0.31.1-desktop.1/buildx-v0.31.1-desktop.1.linux-arm-v7.sbom.json",
"https://github.com/docker/buildx-desktop/releases/download/v0.31.1-desktop.1/buildx-v0.31.1-desktop.1.linux-arm64",
"https://github.com/docker/buildx-desktop/releases/download/v0.31.1-desktop.1/buildx-v0.31.1-desktop.1.linux-arm64.sbom.json",
"https://github.com/docker/buildx-desktop/releases/download/v0.31.1-desktop.1/buildx-v0.31.1-desktop.1.linux-ppc64le",
"https://github.com/docker/buildx-desktop/releases/download/v0.31.1-desktop.1/buildx-v0.31.1-desktop.1.linux-ppc64le.sbom.json",
"https://github.com/docker/buildx-desktop/releases/download/v0.31.1-desktop.1/buildx-v0.31.1-desktop.1.linux-riscv64",
"https://github.com/docker/buildx-desktop/releases/download/v0.31.1-desktop.1/buildx-v0.31.1-desktop.1.linux-riscv64.sbom.json",
"https://github.com/docker/buildx-desktop/releases/download/v0.31.1-desktop.1/buildx-v0.31.1-desktop.1.linux-s390x",
"https://github.com/docker/buildx-desktop/releases/download/v0.31.1-desktop.1/buildx-v0.31.1-desktop.1.linux-s390x.sbom.json",
"https://github.com/docker/buildx-desktop/releases/download/v0.31.1-desktop.1/buildx-v0.31.1-desktop.1.netbsd-amd64",
"https://github.com/docker/buildx-desktop/releases/download/v0.31.1-desktop.1/buildx-v0.31.1-desktop.1.netbsd-amd64.sbom.json",
"https://github.com/docker/buildx-desktop/releases/download/v0.31.1-desktop.1/buildx-v0.31.1-desktop.1.netbsd-arm64",
"https://github.com/docker/buildx-desktop/releases/download/v0.31.1-desktop.1/buildx-v0.31.1-desktop.1.netbsd-arm64.sbom.json",
"https://github.com/docker/buildx-desktop/releases/download/v0.31.1-desktop.1/buildx-v0.31.1-desktop.1.openbsd-amd64",
"https://github.com/docker/buildx-desktop/releases/download/v0.31.1-desktop.1/buildx-v0.31.1-desktop.1.openbsd-amd64.sbom.json",
"https://github.com/docker/buildx-desktop/releases/download/v0.31.1-desktop.1/buildx-v0.31.1-desktop.1.openbsd-arm64",
"https://github.com/docker/buildx-desktop/releases/download/v0.31.1-desktop.1/buildx-v0.31.1-desktop.1.openbsd-arm64.sbom.json",
"https://github.com/docker/buildx-desktop/releases/download/v0.31.1-desktop.1/buildx-v0.31.1-desktop.1.windows-amd64.exe",
"https://github.com/docker/buildx-desktop/releases/download/v0.31.1-desktop.1/buildx-v0.31.1-desktop.1.windows-amd64.sbom.json",
"https://github.com/docker/buildx-desktop/releases/download/v0.31.1-desktop.1/buildx-v0.31.1-desktop.1.windows-arm64.exe",
"https://github.com/docker/buildx-desktop/releases/download/v0.31.1-desktop.1/buildx-v0.31.1-desktop.1.windows-arm64.sbom.json",
"https://github.com/docker/buildx-desktop/releases/download/v0.31.1-desktop.1/checksums.txt"
]
},
"v0.28.0-desktop.1": {

View File

@@ -1,153 +1,523 @@
{
"latest": {
"id": 278817585,
"tag_name": "v0.31.0",
"html_url": "https://github.com/docker/buildx/releases/tag/v0.31.0",
"id": 293153745,
"tag_name": "v0.32.1",
"html_url": "https://github.com/docker/buildx/releases/tag/v0.32.1",
"assets": [
"https://github.com/docker/buildx/releases/download/v0.31.0/buildx-v0.31.0.darwin-amd64",
"https://github.com/docker/buildx/releases/download/v0.31.0/buildx-v0.31.0.darwin-amd64.provenance.json",
"https://github.com/docker/buildx/releases/download/v0.31.0/buildx-v0.31.0.darwin-amd64.sbom.json",
"https://github.com/docker/buildx/releases/download/v0.31.0/buildx-v0.31.0.darwin-arm64",
"https://github.com/docker/buildx/releases/download/v0.31.0/buildx-v0.31.0.darwin-arm64.provenance.json",
"https://github.com/docker/buildx/releases/download/v0.31.0/buildx-v0.31.0.darwin-arm64.sbom.json",
"https://github.com/docker/buildx/releases/download/v0.31.0/buildx-v0.31.0.freebsd-amd64",
"https://github.com/docker/buildx/releases/download/v0.31.0/buildx-v0.31.0.freebsd-amd64.provenance.json",
"https://github.com/docker/buildx/releases/download/v0.31.0/buildx-v0.31.0.freebsd-amd64.sbom.json",
"https://github.com/docker/buildx/releases/download/v0.31.0/buildx-v0.31.0.freebsd-amd64.sigstore.json",
"https://github.com/docker/buildx/releases/download/v0.31.0/buildx-v0.31.0.freebsd-arm64",
"https://github.com/docker/buildx/releases/download/v0.31.0/buildx-v0.31.0.freebsd-arm64.provenance.json",
"https://github.com/docker/buildx/releases/download/v0.31.0/buildx-v0.31.0.freebsd-arm64.sbom.json",
"https://github.com/docker/buildx/releases/download/v0.31.0/buildx-v0.31.0.freebsd-arm64.sigstore.json",
"https://github.com/docker/buildx/releases/download/v0.31.0/buildx-v0.31.0.linux-amd64",
"https://github.com/docker/buildx/releases/download/v0.31.0/buildx-v0.31.0.linux-amd64.provenance.json",
"https://github.com/docker/buildx/releases/download/v0.31.0/buildx-v0.31.0.linux-amd64.sbom.json",
"https://github.com/docker/buildx/releases/download/v0.31.0/buildx-v0.31.0.linux-amd64.sigstore.json",
"https://github.com/docker/buildx/releases/download/v0.31.0/buildx-v0.31.0.linux-arm-v6",
"https://github.com/docker/buildx/releases/download/v0.31.0/buildx-v0.31.0.linux-arm-v6.provenance.json",
"https://github.com/docker/buildx/releases/download/v0.31.0/buildx-v0.31.0.linux-arm-v6.sbom.json",
"https://github.com/docker/buildx/releases/download/v0.31.0/buildx-v0.31.0.linux-arm-v6.sigstore.json",
"https://github.com/docker/buildx/releases/download/v0.31.0/buildx-v0.31.0.linux-arm-v7",
"https://github.com/docker/buildx/releases/download/v0.31.0/buildx-v0.31.0.linux-arm-v7.provenance.json",
"https://github.com/docker/buildx/releases/download/v0.31.0/buildx-v0.31.0.linux-arm-v7.sbom.json",
"https://github.com/docker/buildx/releases/download/v0.31.0/buildx-v0.31.0.linux-arm-v7.sigstore.json",
"https://github.com/docker/buildx/releases/download/v0.31.0/buildx-v0.31.0.linux-arm64",
"https://github.com/docker/buildx/releases/download/v0.31.0/buildx-v0.31.0.linux-arm64.provenance.json",
"https://github.com/docker/buildx/releases/download/v0.31.0/buildx-v0.31.0.linux-arm64.sbom.json",
"https://github.com/docker/buildx/releases/download/v0.31.0/buildx-v0.31.0.linux-arm64.sigstore.json",
"https://github.com/docker/buildx/releases/download/v0.31.0/buildx-v0.31.0.linux-ppc64le",
"https://github.com/docker/buildx/releases/download/v0.31.0/buildx-v0.31.0.linux-ppc64le.provenance.json",
"https://github.com/docker/buildx/releases/download/v0.31.0/buildx-v0.31.0.linux-ppc64le.sbom.json",
"https://github.com/docker/buildx/releases/download/v0.31.0/buildx-v0.31.0.linux-ppc64le.sigstore.json",
"https://github.com/docker/buildx/releases/download/v0.31.0/buildx-v0.31.0.linux-riscv64",
"https://github.com/docker/buildx/releases/download/v0.31.0/buildx-v0.31.0.linux-riscv64.provenance.json",
"https://github.com/docker/buildx/releases/download/v0.31.0/buildx-v0.31.0.linux-riscv64.sbom.json",
"https://github.com/docker/buildx/releases/download/v0.31.0/buildx-v0.31.0.linux-riscv64.sigstore.json",
"https://github.com/docker/buildx/releases/download/v0.31.0/buildx-v0.31.0.linux-s390x",
"https://github.com/docker/buildx/releases/download/v0.31.0/buildx-v0.31.0.linux-s390x.provenance.json",
"https://github.com/docker/buildx/releases/download/v0.31.0/buildx-v0.31.0.linux-s390x.sbom.json",
"https://github.com/docker/buildx/releases/download/v0.31.0/buildx-v0.31.0.linux-s390x.sigstore.json",
"https://github.com/docker/buildx/releases/download/v0.31.0/buildx-v0.31.0.netbsd-amd64",
"https://github.com/docker/buildx/releases/download/v0.31.0/buildx-v0.31.0.netbsd-amd64.provenance.json",
"https://github.com/docker/buildx/releases/download/v0.31.0/buildx-v0.31.0.netbsd-amd64.sbom.json",
"https://github.com/docker/buildx/releases/download/v0.31.0/buildx-v0.31.0.netbsd-amd64.sigstore.json",
"https://github.com/docker/buildx/releases/download/v0.31.0/buildx-v0.31.0.netbsd-arm64",
"https://github.com/docker/buildx/releases/download/v0.31.0/buildx-v0.31.0.netbsd-arm64.provenance.json",
"https://github.com/docker/buildx/releases/download/v0.31.0/buildx-v0.31.0.netbsd-arm64.sbom.json",
"https://github.com/docker/buildx/releases/download/v0.31.0/buildx-v0.31.0.netbsd-arm64.sigstore.json",
"https://github.com/docker/buildx/releases/download/v0.31.0/buildx-v0.31.0.openbsd-amd64",
"https://github.com/docker/buildx/releases/download/v0.31.0/buildx-v0.31.0.openbsd-amd64.provenance.json",
"https://github.com/docker/buildx/releases/download/v0.31.0/buildx-v0.31.0.openbsd-amd64.sbom.json",
"https://github.com/docker/buildx/releases/download/v0.31.0/buildx-v0.31.0.openbsd-amd64.sigstore.json",
"https://github.com/docker/buildx/releases/download/v0.31.0/buildx-v0.31.0.openbsd-arm64",
"https://github.com/docker/buildx/releases/download/v0.31.0/buildx-v0.31.0.openbsd-arm64.provenance.json",
"https://github.com/docker/buildx/releases/download/v0.31.0/buildx-v0.31.0.openbsd-arm64.sbom.json",
"https://github.com/docker/buildx/releases/download/v0.31.0/buildx-v0.31.0.openbsd-arm64.sigstore.json",
"https://github.com/docker/buildx/releases/download/v0.31.0/buildx-v0.31.0.windows-amd64.exe",
"https://github.com/docker/buildx/releases/download/v0.31.0/buildx-v0.31.0.windows-amd64.provenance.json",
"https://github.com/docker/buildx/releases/download/v0.31.0/buildx-v0.31.0.windows-amd64.sbom.json",
"https://github.com/docker/buildx/releases/download/v0.31.0/buildx-v0.31.0.windows-amd64.sigstore.json",
"https://github.com/docker/buildx/releases/download/v0.31.0/buildx-v0.31.0.windows-arm64.exe",
"https://github.com/docker/buildx/releases/download/v0.31.0/buildx-v0.31.0.windows-arm64.provenance.json",
"https://github.com/docker/buildx/releases/download/v0.31.0/buildx-v0.31.0.windows-arm64.sbom.json",
"https://github.com/docker/buildx/releases/download/v0.31.0/buildx-v0.31.0.windows-arm64.sigstore.json",
"https://github.com/docker/buildx/releases/download/v0.31.0/checksums.txt"
"https://github.com/docker/buildx/releases/download/v0.32.1/buildx-v0.32.1.darwin-amd64",
"https://github.com/docker/buildx/releases/download/v0.32.1/buildx-v0.32.1.darwin-amd64.provenance.json",
"https://github.com/docker/buildx/releases/download/v0.32.1/buildx-v0.32.1.darwin-amd64.sbom.json",
"https://github.com/docker/buildx/releases/download/v0.32.1/buildx-v0.32.1.darwin-arm64",
"https://github.com/docker/buildx/releases/download/v0.32.1/buildx-v0.32.1.darwin-arm64.provenance.json",
"https://github.com/docker/buildx/releases/download/v0.32.1/buildx-v0.32.1.darwin-arm64.sbom.json",
"https://github.com/docker/buildx/releases/download/v0.32.1/buildx-v0.32.1.freebsd-amd64",
"https://github.com/docker/buildx/releases/download/v0.32.1/buildx-v0.32.1.freebsd-amd64.provenance.json",
"https://github.com/docker/buildx/releases/download/v0.32.1/buildx-v0.32.1.freebsd-amd64.sbom.json",
"https://github.com/docker/buildx/releases/download/v0.32.1/buildx-v0.32.1.freebsd-amd64.sigstore.json",
"https://github.com/docker/buildx/releases/download/v0.32.1/buildx-v0.32.1.freebsd-arm64",
"https://github.com/docker/buildx/releases/download/v0.32.1/buildx-v0.32.1.freebsd-arm64.provenance.json",
"https://github.com/docker/buildx/releases/download/v0.32.1/buildx-v0.32.1.freebsd-arm64.sbom.json",
"https://github.com/docker/buildx/releases/download/v0.32.1/buildx-v0.32.1.freebsd-arm64.sigstore.json",
"https://github.com/docker/buildx/releases/download/v0.32.1/buildx-v0.32.1.linux-amd64",
"https://github.com/docker/buildx/releases/download/v0.32.1/buildx-v0.32.1.linux-amd64.provenance.json",
"https://github.com/docker/buildx/releases/download/v0.32.1/buildx-v0.32.1.linux-amd64.sbom.json",
"https://github.com/docker/buildx/releases/download/v0.32.1/buildx-v0.32.1.linux-amd64.sigstore.json",
"https://github.com/docker/buildx/releases/download/v0.32.1/buildx-v0.32.1.linux-arm-v6",
"https://github.com/docker/buildx/releases/download/v0.32.1/buildx-v0.32.1.linux-arm-v6.provenance.json",
"https://github.com/docker/buildx/releases/download/v0.32.1/buildx-v0.32.1.linux-arm-v6.sbom.json",
"https://github.com/docker/buildx/releases/download/v0.32.1/buildx-v0.32.1.linux-arm-v6.sigstore.json",
"https://github.com/docker/buildx/releases/download/v0.32.1/buildx-v0.32.1.linux-arm-v7",
"https://github.com/docker/buildx/releases/download/v0.32.1/buildx-v0.32.1.linux-arm-v7.provenance.json",
"https://github.com/docker/buildx/releases/download/v0.32.1/buildx-v0.32.1.linux-arm-v7.sbom.json",
"https://github.com/docker/buildx/releases/download/v0.32.1/buildx-v0.32.1.linux-arm-v7.sigstore.json",
"https://github.com/docker/buildx/releases/download/v0.32.1/buildx-v0.32.1.linux-arm64",
"https://github.com/docker/buildx/releases/download/v0.32.1/buildx-v0.32.1.linux-arm64.provenance.json",
"https://github.com/docker/buildx/releases/download/v0.32.1/buildx-v0.32.1.linux-arm64.sbom.json",
"https://github.com/docker/buildx/releases/download/v0.32.1/buildx-v0.32.1.linux-arm64.sigstore.json",
"https://github.com/docker/buildx/releases/download/v0.32.1/buildx-v0.32.1.linux-ppc64le",
"https://github.com/docker/buildx/releases/download/v0.32.1/buildx-v0.32.1.linux-ppc64le.provenance.json",
"https://github.com/docker/buildx/releases/download/v0.32.1/buildx-v0.32.1.linux-ppc64le.sbom.json",
"https://github.com/docker/buildx/releases/download/v0.32.1/buildx-v0.32.1.linux-ppc64le.sigstore.json",
"https://github.com/docker/buildx/releases/download/v0.32.1/buildx-v0.32.1.linux-riscv64",
"https://github.com/docker/buildx/releases/download/v0.32.1/buildx-v0.32.1.linux-riscv64.provenance.json",
"https://github.com/docker/buildx/releases/download/v0.32.1/buildx-v0.32.1.linux-riscv64.sbom.json",
"https://github.com/docker/buildx/releases/download/v0.32.1/buildx-v0.32.1.linux-riscv64.sigstore.json",
"https://github.com/docker/buildx/releases/download/v0.32.1/buildx-v0.32.1.linux-s390x",
"https://github.com/docker/buildx/releases/download/v0.32.1/buildx-v0.32.1.linux-s390x.provenance.json",
"https://github.com/docker/buildx/releases/download/v0.32.1/buildx-v0.32.1.linux-s390x.sbom.json",
"https://github.com/docker/buildx/releases/download/v0.32.1/buildx-v0.32.1.linux-s390x.sigstore.json",
"https://github.com/docker/buildx/releases/download/v0.32.1/buildx-v0.32.1.netbsd-amd64",
"https://github.com/docker/buildx/releases/download/v0.32.1/buildx-v0.32.1.netbsd-amd64.provenance.json",
"https://github.com/docker/buildx/releases/download/v0.32.1/buildx-v0.32.1.netbsd-amd64.sbom.json",
"https://github.com/docker/buildx/releases/download/v0.32.1/buildx-v0.32.1.netbsd-amd64.sigstore.json",
"https://github.com/docker/buildx/releases/download/v0.32.1/buildx-v0.32.1.netbsd-arm64",
"https://github.com/docker/buildx/releases/download/v0.32.1/buildx-v0.32.1.netbsd-arm64.provenance.json",
"https://github.com/docker/buildx/releases/download/v0.32.1/buildx-v0.32.1.netbsd-arm64.sbom.json",
"https://github.com/docker/buildx/releases/download/v0.32.1/buildx-v0.32.1.netbsd-arm64.sigstore.json",
"https://github.com/docker/buildx/releases/download/v0.32.1/buildx-v0.32.1.openbsd-amd64",
"https://github.com/docker/buildx/releases/download/v0.32.1/buildx-v0.32.1.openbsd-amd64.provenance.json",
"https://github.com/docker/buildx/releases/download/v0.32.1/buildx-v0.32.1.openbsd-amd64.sbom.json",
"https://github.com/docker/buildx/releases/download/v0.32.1/buildx-v0.32.1.openbsd-amd64.sigstore.json",
"https://github.com/docker/buildx/releases/download/v0.32.1/buildx-v0.32.1.openbsd-arm64",
"https://github.com/docker/buildx/releases/download/v0.32.1/buildx-v0.32.1.openbsd-arm64.provenance.json",
"https://github.com/docker/buildx/releases/download/v0.32.1/buildx-v0.32.1.openbsd-arm64.sbom.json",
"https://github.com/docker/buildx/releases/download/v0.32.1/buildx-v0.32.1.openbsd-arm64.sigstore.json",
"https://github.com/docker/buildx/releases/download/v0.32.1/buildx-v0.32.1.windows-amd64.exe",
"https://github.com/docker/buildx/releases/download/v0.32.1/buildx-v0.32.1.windows-amd64.provenance.json",
"https://github.com/docker/buildx/releases/download/v0.32.1/buildx-v0.32.1.windows-amd64.sbom.json",
"https://github.com/docker/buildx/releases/download/v0.32.1/buildx-v0.32.1.windows-amd64.sigstore.json",
"https://github.com/docker/buildx/releases/download/v0.32.1/buildx-v0.32.1.windows-arm64.exe",
"https://github.com/docker/buildx/releases/download/v0.32.1/buildx-v0.32.1.windows-arm64.provenance.json",
"https://github.com/docker/buildx/releases/download/v0.32.1/buildx-v0.32.1.windows-arm64.sbom.json",
"https://github.com/docker/buildx/releases/download/v0.32.1/buildx-v0.32.1.windows-arm64.sigstore.json",
"https://github.com/docker/buildx/releases/download/v0.32.1/checksums.txt"
]
},
"v0.31.0": {
"id": 278817585,
"tag_name": "v0.31.0",
"html_url": "https://github.com/docker/buildx/releases/tag/v0.31.0",
"v0.32.1": {
"id": 293153745,
"tag_name": "v0.32.1",
"html_url": "https://github.com/docker/buildx/releases/tag/v0.32.1",
"assets": [
"https://github.com/docker/buildx/releases/download/v0.31.0/buildx-v0.31.0.darwin-amd64",
"https://github.com/docker/buildx/releases/download/v0.31.0/buildx-v0.31.0.darwin-amd64.provenance.json",
"https://github.com/docker/buildx/releases/download/v0.31.0/buildx-v0.31.0.darwin-amd64.sbom.json",
"https://github.com/docker/buildx/releases/download/v0.31.0/buildx-v0.31.0.darwin-arm64",
"https://github.com/docker/buildx/releases/download/v0.31.0/buildx-v0.31.0.darwin-arm64.provenance.json",
"https://github.com/docker/buildx/releases/download/v0.31.0/buildx-v0.31.0.darwin-arm64.sbom.json",
"https://github.com/docker/buildx/releases/download/v0.31.0/buildx-v0.31.0.freebsd-amd64",
"https://github.com/docker/buildx/releases/download/v0.31.0/buildx-v0.31.0.freebsd-amd64.provenance.json",
"https://github.com/docker/buildx/releases/download/v0.31.0/buildx-v0.31.0.freebsd-amd64.sbom.json",
"https://github.com/docker/buildx/releases/download/v0.31.0/buildx-v0.31.0.freebsd-amd64.sigstore.json",
"https://github.com/docker/buildx/releases/download/v0.31.0/buildx-v0.31.0.freebsd-arm64",
"https://github.com/docker/buildx/releases/download/v0.31.0/buildx-v0.31.0.freebsd-arm64.provenance.json",
"https://github.com/docker/buildx/releases/download/v0.31.0/buildx-v0.31.0.freebsd-arm64.sbom.json",
"https://github.com/docker/buildx/releases/download/v0.31.0/buildx-v0.31.0.freebsd-arm64.sigstore.json",
"https://github.com/docker/buildx/releases/download/v0.31.0/buildx-v0.31.0.linux-amd64",
"https://github.com/docker/buildx/releases/download/v0.31.0/buildx-v0.31.0.linux-amd64.provenance.json",
"https://github.com/docker/buildx/releases/download/v0.31.0/buildx-v0.31.0.linux-amd64.sbom.json",
"https://github.com/docker/buildx/releases/download/v0.31.0/buildx-v0.31.0.linux-amd64.sigstore.json",
"https://github.com/docker/buildx/releases/download/v0.31.0/buildx-v0.31.0.linux-arm-v6",
"https://github.com/docker/buildx/releases/download/v0.31.0/buildx-v0.31.0.linux-arm-v6.provenance.json",
"https://github.com/docker/buildx/releases/download/v0.31.0/buildx-v0.31.0.linux-arm-v6.sbom.json",
"https://github.com/docker/buildx/releases/download/v0.31.0/buildx-v0.31.0.linux-arm-v6.sigstore.json",
"https://github.com/docker/buildx/releases/download/v0.31.0/buildx-v0.31.0.linux-arm-v7",
"https://github.com/docker/buildx/releases/download/v0.31.0/buildx-v0.31.0.linux-arm-v7.provenance.json",
"https://github.com/docker/buildx/releases/download/v0.31.0/buildx-v0.31.0.linux-arm-v7.sbom.json",
"https://github.com/docker/buildx/releases/download/v0.31.0/buildx-v0.31.0.linux-arm-v7.sigstore.json",
"https://github.com/docker/buildx/releases/download/v0.31.0/buildx-v0.31.0.linux-arm64",
"https://github.com/docker/buildx/releases/download/v0.31.0/buildx-v0.31.0.linux-arm64.provenance.json",
"https://github.com/docker/buildx/releases/download/v0.31.0/buildx-v0.31.0.linux-arm64.sbom.json",
"https://github.com/docker/buildx/releases/download/v0.31.0/buildx-v0.31.0.linux-arm64.sigstore.json",
"https://github.com/docker/buildx/releases/download/v0.31.0/buildx-v0.31.0.linux-ppc64le",
"https://github.com/docker/buildx/releases/download/v0.31.0/buildx-v0.31.0.linux-ppc64le.provenance.json",
"https://github.com/docker/buildx/releases/download/v0.31.0/buildx-v0.31.0.linux-ppc64le.sbom.json",
"https://github.com/docker/buildx/releases/download/v0.31.0/buildx-v0.31.0.linux-ppc64le.sigstore.json",
"https://github.com/docker/buildx/releases/download/v0.31.0/buildx-v0.31.0.linux-riscv64",
"https://github.com/docker/buildx/releases/download/v0.31.0/buildx-v0.31.0.linux-riscv64.provenance.json",
"https://github.com/docker/buildx/releases/download/v0.31.0/buildx-v0.31.0.linux-riscv64.sbom.json",
"https://github.com/docker/buildx/releases/download/v0.31.0/buildx-v0.31.0.linux-riscv64.sigstore.json",
"https://github.com/docker/buildx/releases/download/v0.31.0/buildx-v0.31.0.linux-s390x",
"https://github.com/docker/buildx/releases/download/v0.31.0/buildx-v0.31.0.linux-s390x.provenance.json",
"https://github.com/docker/buildx/releases/download/v0.31.0/buildx-v0.31.0.linux-s390x.sbom.json",
"https://github.com/docker/buildx/releases/download/v0.31.0/buildx-v0.31.0.linux-s390x.sigstore.json",
"https://github.com/docker/buildx/releases/download/v0.31.0/buildx-v0.31.0.netbsd-amd64",
"https://github.com/docker/buildx/releases/download/v0.31.0/buildx-v0.31.0.netbsd-amd64.provenance.json",
"https://github.com/docker/buildx/releases/download/v0.31.0/buildx-v0.31.0.netbsd-amd64.sbom.json",
"https://github.com/docker/buildx/releases/download/v0.31.0/buildx-v0.31.0.netbsd-amd64.sigstore.json",
"https://github.com/docker/buildx/releases/download/v0.31.0/buildx-v0.31.0.netbsd-arm64",
"https://github.com/docker/buildx/releases/download/v0.31.0/buildx-v0.31.0.netbsd-arm64.provenance.json",
"https://github.com/docker/buildx/releases/download/v0.31.0/buildx-v0.31.0.netbsd-arm64.sbom.json",
"https://github.com/docker/buildx/releases/download/v0.31.0/buildx-v0.31.0.netbsd-arm64.sigstore.json",
"https://github.com/docker/buildx/releases/download/v0.31.0/buildx-v0.31.0.openbsd-amd64",
"https://github.com/docker/buildx/releases/download/v0.31.0/buildx-v0.31.0.openbsd-amd64.provenance.json",
"https://github.com/docker/buildx/releases/download/v0.31.0/buildx-v0.31.0.openbsd-amd64.sbom.json",
"https://github.com/docker/buildx/releases/download/v0.31.0/buildx-v0.31.0.openbsd-amd64.sigstore.json",
"https://github.com/docker/buildx/releases/download/v0.31.0/buildx-v0.31.0.openbsd-arm64",
"https://github.com/docker/buildx/releases/download/v0.31.0/buildx-v0.31.0.openbsd-arm64.provenance.json",
"https://github.com/docker/buildx/releases/download/v0.31.0/buildx-v0.31.0.openbsd-arm64.sbom.json",
"https://github.com/docker/buildx/releases/download/v0.31.0/buildx-v0.31.0.openbsd-arm64.sigstore.json",
"https://github.com/docker/buildx/releases/download/v0.31.0/buildx-v0.31.0.windows-amd64.exe",
"https://github.com/docker/buildx/releases/download/v0.31.0/buildx-v0.31.0.windows-amd64.provenance.json",
"https://github.com/docker/buildx/releases/download/v0.31.0/buildx-v0.31.0.windows-amd64.sbom.json",
"https://github.com/docker/buildx/releases/download/v0.31.0/buildx-v0.31.0.windows-amd64.sigstore.json",
"https://github.com/docker/buildx/releases/download/v0.31.0/buildx-v0.31.0.windows-arm64.exe",
"https://github.com/docker/buildx/releases/download/v0.31.0/buildx-v0.31.0.windows-arm64.provenance.json",
"https://github.com/docker/buildx/releases/download/v0.31.0/buildx-v0.31.0.windows-arm64.sbom.json",
"https://github.com/docker/buildx/releases/download/v0.31.0/buildx-v0.31.0.windows-arm64.sigstore.json",
"https://github.com/docker/buildx/releases/download/v0.31.0/checksums.txt"
"https://github.com/docker/buildx/releases/download/v0.32.1/buildx-v0.32.1.darwin-amd64",
"https://github.com/docker/buildx/releases/download/v0.32.1/buildx-v0.32.1.darwin-amd64.provenance.json",
"https://github.com/docker/buildx/releases/download/v0.32.1/buildx-v0.32.1.darwin-amd64.sbom.json",
"https://github.com/docker/buildx/releases/download/v0.32.1/buildx-v0.32.1.darwin-arm64",
"https://github.com/docker/buildx/releases/download/v0.32.1/buildx-v0.32.1.darwin-arm64.provenance.json",
"https://github.com/docker/buildx/releases/download/v0.32.1/buildx-v0.32.1.darwin-arm64.sbom.json",
"https://github.com/docker/buildx/releases/download/v0.32.1/buildx-v0.32.1.freebsd-amd64",
"https://github.com/docker/buildx/releases/download/v0.32.1/buildx-v0.32.1.freebsd-amd64.provenance.json",
"https://github.com/docker/buildx/releases/download/v0.32.1/buildx-v0.32.1.freebsd-amd64.sbom.json",
"https://github.com/docker/buildx/releases/download/v0.32.1/buildx-v0.32.1.freebsd-amd64.sigstore.json",
"https://github.com/docker/buildx/releases/download/v0.32.1/buildx-v0.32.1.freebsd-arm64",
"https://github.com/docker/buildx/releases/download/v0.32.1/buildx-v0.32.1.freebsd-arm64.provenance.json",
"https://github.com/docker/buildx/releases/download/v0.32.1/buildx-v0.32.1.freebsd-arm64.sbom.json",
"https://github.com/docker/buildx/releases/download/v0.32.1/buildx-v0.32.1.freebsd-arm64.sigstore.json",
"https://github.com/docker/buildx/releases/download/v0.32.1/buildx-v0.32.1.linux-amd64",
"https://github.com/docker/buildx/releases/download/v0.32.1/buildx-v0.32.1.linux-amd64.provenance.json",
"https://github.com/docker/buildx/releases/download/v0.32.1/buildx-v0.32.1.linux-amd64.sbom.json",
"https://github.com/docker/buildx/releases/download/v0.32.1/buildx-v0.32.1.linux-amd64.sigstore.json",
"https://github.com/docker/buildx/releases/download/v0.32.1/buildx-v0.32.1.linux-arm-v6",
"https://github.com/docker/buildx/releases/download/v0.32.1/buildx-v0.32.1.linux-arm-v6.provenance.json",
"https://github.com/docker/buildx/releases/download/v0.32.1/buildx-v0.32.1.linux-arm-v6.sbom.json",
"https://github.com/docker/buildx/releases/download/v0.32.1/buildx-v0.32.1.linux-arm-v6.sigstore.json",
"https://github.com/docker/buildx/releases/download/v0.32.1/buildx-v0.32.1.linux-arm-v7",
"https://github.com/docker/buildx/releases/download/v0.32.1/buildx-v0.32.1.linux-arm-v7.provenance.json",
"https://github.com/docker/buildx/releases/download/v0.32.1/buildx-v0.32.1.linux-arm-v7.sbom.json",
"https://github.com/docker/buildx/releases/download/v0.32.1/buildx-v0.32.1.linux-arm-v7.sigstore.json",
"https://github.com/docker/buildx/releases/download/v0.32.1/buildx-v0.32.1.linux-arm64",
"https://github.com/docker/buildx/releases/download/v0.32.1/buildx-v0.32.1.linux-arm64.provenance.json",
"https://github.com/docker/buildx/releases/download/v0.32.1/buildx-v0.32.1.linux-arm64.sbom.json",
"https://github.com/docker/buildx/releases/download/v0.32.1/buildx-v0.32.1.linux-arm64.sigstore.json",
"https://github.com/docker/buildx/releases/download/v0.32.1/buildx-v0.32.1.linux-ppc64le",
"https://github.com/docker/buildx/releases/download/v0.32.1/buildx-v0.32.1.linux-ppc64le.provenance.json",
"https://github.com/docker/buildx/releases/download/v0.32.1/buildx-v0.32.1.linux-ppc64le.sbom.json",
"https://github.com/docker/buildx/releases/download/v0.32.1/buildx-v0.32.1.linux-ppc64le.sigstore.json",
"https://github.com/docker/buildx/releases/download/v0.32.1/buildx-v0.32.1.linux-riscv64",
"https://github.com/docker/buildx/releases/download/v0.32.1/buildx-v0.32.1.linux-riscv64.provenance.json",
"https://github.com/docker/buildx/releases/download/v0.32.1/buildx-v0.32.1.linux-riscv64.sbom.json",
"https://github.com/docker/buildx/releases/download/v0.32.1/buildx-v0.32.1.linux-riscv64.sigstore.json",
"https://github.com/docker/buildx/releases/download/v0.32.1/buildx-v0.32.1.linux-s390x",
"https://github.com/docker/buildx/releases/download/v0.32.1/buildx-v0.32.1.linux-s390x.provenance.json",
"https://github.com/docker/buildx/releases/download/v0.32.1/buildx-v0.32.1.linux-s390x.sbom.json",
"https://github.com/docker/buildx/releases/download/v0.32.1/buildx-v0.32.1.linux-s390x.sigstore.json",
"https://github.com/docker/buildx/releases/download/v0.32.1/buildx-v0.32.1.netbsd-amd64",
"https://github.com/docker/buildx/releases/download/v0.32.1/buildx-v0.32.1.netbsd-amd64.provenance.json",
"https://github.com/docker/buildx/releases/download/v0.32.1/buildx-v0.32.1.netbsd-amd64.sbom.json",
"https://github.com/docker/buildx/releases/download/v0.32.1/buildx-v0.32.1.netbsd-amd64.sigstore.json",
"https://github.com/docker/buildx/releases/download/v0.32.1/buildx-v0.32.1.netbsd-arm64",
"https://github.com/docker/buildx/releases/download/v0.32.1/buildx-v0.32.1.netbsd-arm64.provenance.json",
"https://github.com/docker/buildx/releases/download/v0.32.1/buildx-v0.32.1.netbsd-arm64.sbom.json",
"https://github.com/docker/buildx/releases/download/v0.32.1/buildx-v0.32.1.netbsd-arm64.sigstore.json",
"https://github.com/docker/buildx/releases/download/v0.32.1/buildx-v0.32.1.openbsd-amd64",
"https://github.com/docker/buildx/releases/download/v0.32.1/buildx-v0.32.1.openbsd-amd64.provenance.json",
"https://github.com/docker/buildx/releases/download/v0.32.1/buildx-v0.32.1.openbsd-amd64.sbom.json",
"https://github.com/docker/buildx/releases/download/v0.32.1/buildx-v0.32.1.openbsd-amd64.sigstore.json",
"https://github.com/docker/buildx/releases/download/v0.32.1/buildx-v0.32.1.openbsd-arm64",
"https://github.com/docker/buildx/releases/download/v0.32.1/buildx-v0.32.1.openbsd-arm64.provenance.json",
"https://github.com/docker/buildx/releases/download/v0.32.1/buildx-v0.32.1.openbsd-arm64.sbom.json",
"https://github.com/docker/buildx/releases/download/v0.32.1/buildx-v0.32.1.openbsd-arm64.sigstore.json",
"https://github.com/docker/buildx/releases/download/v0.32.1/buildx-v0.32.1.windows-amd64.exe",
"https://github.com/docker/buildx/releases/download/v0.32.1/buildx-v0.32.1.windows-amd64.provenance.json",
"https://github.com/docker/buildx/releases/download/v0.32.1/buildx-v0.32.1.windows-amd64.sbom.json",
"https://github.com/docker/buildx/releases/download/v0.32.1/buildx-v0.32.1.windows-amd64.sigstore.json",
"https://github.com/docker/buildx/releases/download/v0.32.1/buildx-v0.32.1.windows-arm64.exe",
"https://github.com/docker/buildx/releases/download/v0.32.1/buildx-v0.32.1.windows-arm64.provenance.json",
"https://github.com/docker/buildx/releases/download/v0.32.1/buildx-v0.32.1.windows-arm64.sbom.json",
"https://github.com/docker/buildx/releases/download/v0.32.1/buildx-v0.32.1.windows-arm64.sigstore.json",
"https://github.com/docker/buildx/releases/download/v0.32.1/checksums.txt"
]
},
"v0.32.0": {
"id": 292739715,
"tag_name": "v0.32.0",
"html_url": "https://github.com/docker/buildx/releases/tag/v0.32.0",
"assets": [
"https://github.com/docker/buildx/releases/download/v0.32.0/buildx-v0.32.0.darwin-amd64",
"https://github.com/docker/buildx/releases/download/v0.32.0/buildx-v0.32.0.darwin-amd64.provenance.json",
"https://github.com/docker/buildx/releases/download/v0.32.0/buildx-v0.32.0.darwin-amd64.sbom.json",
"https://github.com/docker/buildx/releases/download/v0.32.0/buildx-v0.32.0.darwin-arm64",
"https://github.com/docker/buildx/releases/download/v0.32.0/buildx-v0.32.0.darwin-arm64.provenance.json",
"https://github.com/docker/buildx/releases/download/v0.32.0/buildx-v0.32.0.darwin-arm64.sbom.json",
"https://github.com/docker/buildx/releases/download/v0.32.0/buildx-v0.32.0.freebsd-amd64",
"https://github.com/docker/buildx/releases/download/v0.32.0/buildx-v0.32.0.freebsd-amd64.provenance.json",
"https://github.com/docker/buildx/releases/download/v0.32.0/buildx-v0.32.0.freebsd-amd64.sbom.json",
"https://github.com/docker/buildx/releases/download/v0.32.0/buildx-v0.32.0.freebsd-amd64.sigstore.json",
"https://github.com/docker/buildx/releases/download/v0.32.0/buildx-v0.32.0.freebsd-arm64",
"https://github.com/docker/buildx/releases/download/v0.32.0/buildx-v0.32.0.freebsd-arm64.provenance.json",
"https://github.com/docker/buildx/releases/download/v0.32.0/buildx-v0.32.0.freebsd-arm64.sbom.json",
"https://github.com/docker/buildx/releases/download/v0.32.0/buildx-v0.32.0.freebsd-arm64.sigstore.json",
"https://github.com/docker/buildx/releases/download/v0.32.0/buildx-v0.32.0.linux-amd64",
"https://github.com/docker/buildx/releases/download/v0.32.0/buildx-v0.32.0.linux-amd64.provenance.json",
"https://github.com/docker/buildx/releases/download/v0.32.0/buildx-v0.32.0.linux-amd64.sbom.json",
"https://github.com/docker/buildx/releases/download/v0.32.0/buildx-v0.32.0.linux-amd64.sigstore.json",
"https://github.com/docker/buildx/releases/download/v0.32.0/buildx-v0.32.0.linux-arm-v6",
"https://github.com/docker/buildx/releases/download/v0.32.0/buildx-v0.32.0.linux-arm-v6.provenance.json",
"https://github.com/docker/buildx/releases/download/v0.32.0/buildx-v0.32.0.linux-arm-v6.sbom.json",
"https://github.com/docker/buildx/releases/download/v0.32.0/buildx-v0.32.0.linux-arm-v6.sigstore.json",
"https://github.com/docker/buildx/releases/download/v0.32.0/buildx-v0.32.0.linux-arm-v7",
"https://github.com/docker/buildx/releases/download/v0.32.0/buildx-v0.32.0.linux-arm-v7.provenance.json",
"https://github.com/docker/buildx/releases/download/v0.32.0/buildx-v0.32.0.linux-arm-v7.sbom.json",
"https://github.com/docker/buildx/releases/download/v0.32.0/buildx-v0.32.0.linux-arm-v7.sigstore.json",
"https://github.com/docker/buildx/releases/download/v0.32.0/buildx-v0.32.0.linux-arm64",
"https://github.com/docker/buildx/releases/download/v0.32.0/buildx-v0.32.0.linux-arm64.provenance.json",
"https://github.com/docker/buildx/releases/download/v0.32.0/buildx-v0.32.0.linux-arm64.sbom.json",
"https://github.com/docker/buildx/releases/download/v0.32.0/buildx-v0.32.0.linux-arm64.sigstore.json",
"https://github.com/docker/buildx/releases/download/v0.32.0/buildx-v0.32.0.linux-ppc64le",
"https://github.com/docker/buildx/releases/download/v0.32.0/buildx-v0.32.0.linux-ppc64le.provenance.json",
"https://github.com/docker/buildx/releases/download/v0.32.0/buildx-v0.32.0.linux-ppc64le.sbom.json",
"https://github.com/docker/buildx/releases/download/v0.32.0/buildx-v0.32.0.linux-ppc64le.sigstore.json",
"https://github.com/docker/buildx/releases/download/v0.32.0/buildx-v0.32.0.linux-riscv64",
"https://github.com/docker/buildx/releases/download/v0.32.0/buildx-v0.32.0.linux-riscv64.provenance.json",
"https://github.com/docker/buildx/releases/download/v0.32.0/buildx-v0.32.0.linux-riscv64.sbom.json",
"https://github.com/docker/buildx/releases/download/v0.32.0/buildx-v0.32.0.linux-riscv64.sigstore.json",
"https://github.com/docker/buildx/releases/download/v0.32.0/buildx-v0.32.0.linux-s390x",
"https://github.com/docker/buildx/releases/download/v0.32.0/buildx-v0.32.0.linux-s390x.provenance.json",
"https://github.com/docker/buildx/releases/download/v0.32.0/buildx-v0.32.0.linux-s390x.sbom.json",
"https://github.com/docker/buildx/releases/download/v0.32.0/buildx-v0.32.0.linux-s390x.sigstore.json",
"https://github.com/docker/buildx/releases/download/v0.32.0/buildx-v0.32.0.netbsd-amd64",
"https://github.com/docker/buildx/releases/download/v0.32.0/buildx-v0.32.0.netbsd-amd64.provenance.json",
"https://github.com/docker/buildx/releases/download/v0.32.0/buildx-v0.32.0.netbsd-amd64.sbom.json",
"https://github.com/docker/buildx/releases/download/v0.32.0/buildx-v0.32.0.netbsd-amd64.sigstore.json",
"https://github.com/docker/buildx/releases/download/v0.32.0/buildx-v0.32.0.netbsd-arm64",
"https://github.com/docker/buildx/releases/download/v0.32.0/buildx-v0.32.0.netbsd-arm64.provenance.json",
"https://github.com/docker/buildx/releases/download/v0.32.0/buildx-v0.32.0.netbsd-arm64.sbom.json",
"https://github.com/docker/buildx/releases/download/v0.32.0/buildx-v0.32.0.netbsd-arm64.sigstore.json",
"https://github.com/docker/buildx/releases/download/v0.32.0/buildx-v0.32.0.openbsd-amd64",
"https://github.com/docker/buildx/releases/download/v0.32.0/buildx-v0.32.0.openbsd-amd64.provenance.json",
"https://github.com/docker/buildx/releases/download/v0.32.0/buildx-v0.32.0.openbsd-amd64.sbom.json",
"https://github.com/docker/buildx/releases/download/v0.32.0/buildx-v0.32.0.openbsd-amd64.sigstore.json",
"https://github.com/docker/buildx/releases/download/v0.32.0/buildx-v0.32.0.openbsd-arm64",
"https://github.com/docker/buildx/releases/download/v0.32.0/buildx-v0.32.0.openbsd-arm64.provenance.json",
"https://github.com/docker/buildx/releases/download/v0.32.0/buildx-v0.32.0.openbsd-arm64.sbom.json",
"https://github.com/docker/buildx/releases/download/v0.32.0/buildx-v0.32.0.openbsd-arm64.sigstore.json",
"https://github.com/docker/buildx/releases/download/v0.32.0/buildx-v0.32.0.windows-amd64.exe",
"https://github.com/docker/buildx/releases/download/v0.32.0/buildx-v0.32.0.windows-amd64.provenance.json",
"https://github.com/docker/buildx/releases/download/v0.32.0/buildx-v0.32.0.windows-amd64.sbom.json",
"https://github.com/docker/buildx/releases/download/v0.32.0/buildx-v0.32.0.windows-amd64.sigstore.json",
"https://github.com/docker/buildx/releases/download/v0.32.0/buildx-v0.32.0.windows-arm64.exe",
"https://github.com/docker/buildx/releases/download/v0.32.0/buildx-v0.32.0.windows-arm64.provenance.json",
"https://github.com/docker/buildx/releases/download/v0.32.0/buildx-v0.32.0.windows-arm64.sbom.json",
"https://github.com/docker/buildx/releases/download/v0.32.0/buildx-v0.32.0.windows-arm64.sigstore.json",
"https://github.com/docker/buildx/releases/download/v0.32.0/checksums.txt"
]
},
"edge": {
"id": 293153745,
"tag_name": "v0.32.1",
"html_url": "https://github.com/docker/buildx/releases/tag/v0.32.1",
"assets": [
"https://github.com/docker/buildx/releases/download/v0.32.1/buildx-v0.32.1.darwin-amd64",
"https://github.com/docker/buildx/releases/download/v0.32.1/buildx-v0.32.1.darwin-amd64.provenance.json",
"https://github.com/docker/buildx/releases/download/v0.32.1/buildx-v0.32.1.darwin-amd64.sbom.json",
"https://github.com/docker/buildx/releases/download/v0.32.1/buildx-v0.32.1.darwin-arm64",
"https://github.com/docker/buildx/releases/download/v0.32.1/buildx-v0.32.1.darwin-arm64.provenance.json",
"https://github.com/docker/buildx/releases/download/v0.32.1/buildx-v0.32.1.darwin-arm64.sbom.json",
"https://github.com/docker/buildx/releases/download/v0.32.1/buildx-v0.32.1.freebsd-amd64",
"https://github.com/docker/buildx/releases/download/v0.32.1/buildx-v0.32.1.freebsd-amd64.provenance.json",
"https://github.com/docker/buildx/releases/download/v0.32.1/buildx-v0.32.1.freebsd-amd64.sbom.json",
"https://github.com/docker/buildx/releases/download/v0.32.1/buildx-v0.32.1.freebsd-amd64.sigstore.json",
"https://github.com/docker/buildx/releases/download/v0.32.1/buildx-v0.32.1.freebsd-arm64",
"https://github.com/docker/buildx/releases/download/v0.32.1/buildx-v0.32.1.freebsd-arm64.provenance.json",
"https://github.com/docker/buildx/releases/download/v0.32.1/buildx-v0.32.1.freebsd-arm64.sbom.json",
"https://github.com/docker/buildx/releases/download/v0.32.1/buildx-v0.32.1.freebsd-arm64.sigstore.json",
"https://github.com/docker/buildx/releases/download/v0.32.1/buildx-v0.32.1.linux-amd64",
"https://github.com/docker/buildx/releases/download/v0.32.1/buildx-v0.32.1.linux-amd64.provenance.json",
"https://github.com/docker/buildx/releases/download/v0.32.1/buildx-v0.32.1.linux-amd64.sbom.json",
"https://github.com/docker/buildx/releases/download/v0.32.1/buildx-v0.32.1.linux-amd64.sigstore.json",
"https://github.com/docker/buildx/releases/download/v0.32.1/buildx-v0.32.1.linux-arm-v6",
"https://github.com/docker/buildx/releases/download/v0.32.1/buildx-v0.32.1.linux-arm-v6.provenance.json",
"https://github.com/docker/buildx/releases/download/v0.32.1/buildx-v0.32.1.linux-arm-v6.sbom.json",
"https://github.com/docker/buildx/releases/download/v0.32.1/buildx-v0.32.1.linux-arm-v6.sigstore.json",
"https://github.com/docker/buildx/releases/download/v0.32.1/buildx-v0.32.1.linux-arm-v7",
"https://github.com/docker/buildx/releases/download/v0.32.1/buildx-v0.32.1.linux-arm-v7.provenance.json",
"https://github.com/docker/buildx/releases/download/v0.32.1/buildx-v0.32.1.linux-arm-v7.sbom.json",
"https://github.com/docker/buildx/releases/download/v0.32.1/buildx-v0.32.1.linux-arm-v7.sigstore.json",
"https://github.com/docker/buildx/releases/download/v0.32.1/buildx-v0.32.1.linux-arm64",
"https://github.com/docker/buildx/releases/download/v0.32.1/buildx-v0.32.1.linux-arm64.provenance.json",
"https://github.com/docker/buildx/releases/download/v0.32.1/buildx-v0.32.1.linux-arm64.sbom.json",
"https://github.com/docker/buildx/releases/download/v0.32.1/buildx-v0.32.1.linux-arm64.sigstore.json",
"https://github.com/docker/buildx/releases/download/v0.32.1/buildx-v0.32.1.linux-ppc64le",
"https://github.com/docker/buildx/releases/download/v0.32.1/buildx-v0.32.1.linux-ppc64le.provenance.json",
"https://github.com/docker/buildx/releases/download/v0.32.1/buildx-v0.32.1.linux-ppc64le.sbom.json",
"https://github.com/docker/buildx/releases/download/v0.32.1/buildx-v0.32.1.linux-ppc64le.sigstore.json",
"https://github.com/docker/buildx/releases/download/v0.32.1/buildx-v0.32.1.linux-riscv64",
"https://github.com/docker/buildx/releases/download/v0.32.1/buildx-v0.32.1.linux-riscv64.provenance.json",
"https://github.com/docker/buildx/releases/download/v0.32.1/buildx-v0.32.1.linux-riscv64.sbom.json",
"https://github.com/docker/buildx/releases/download/v0.32.1/buildx-v0.32.1.linux-riscv64.sigstore.json",
"https://github.com/docker/buildx/releases/download/v0.32.1/buildx-v0.32.1.linux-s390x",
"https://github.com/docker/buildx/releases/download/v0.32.1/buildx-v0.32.1.linux-s390x.provenance.json",
"https://github.com/docker/buildx/releases/download/v0.32.1/buildx-v0.32.1.linux-s390x.sbom.json",
"https://github.com/docker/buildx/releases/download/v0.32.1/buildx-v0.32.1.linux-s390x.sigstore.json",
"https://github.com/docker/buildx/releases/download/v0.32.1/buildx-v0.32.1.netbsd-amd64",
"https://github.com/docker/buildx/releases/download/v0.32.1/buildx-v0.32.1.netbsd-amd64.provenance.json",
"https://github.com/docker/buildx/releases/download/v0.32.1/buildx-v0.32.1.netbsd-amd64.sbom.json",
"https://github.com/docker/buildx/releases/download/v0.32.1/buildx-v0.32.1.netbsd-amd64.sigstore.json",
"https://github.com/docker/buildx/releases/download/v0.32.1/buildx-v0.32.1.netbsd-arm64",
"https://github.com/docker/buildx/releases/download/v0.32.1/buildx-v0.32.1.netbsd-arm64.provenance.json",
"https://github.com/docker/buildx/releases/download/v0.32.1/buildx-v0.32.1.netbsd-arm64.sbom.json",
"https://github.com/docker/buildx/releases/download/v0.32.1/buildx-v0.32.1.netbsd-arm64.sigstore.json",
"https://github.com/docker/buildx/releases/download/v0.32.1/buildx-v0.32.1.openbsd-amd64",
"https://github.com/docker/buildx/releases/download/v0.32.1/buildx-v0.32.1.openbsd-amd64.provenance.json",
"https://github.com/docker/buildx/releases/download/v0.32.1/buildx-v0.32.1.openbsd-amd64.sbom.json",
"https://github.com/docker/buildx/releases/download/v0.32.1/buildx-v0.32.1.openbsd-amd64.sigstore.json",
"https://github.com/docker/buildx/releases/download/v0.32.1/buildx-v0.32.1.openbsd-arm64",
"https://github.com/docker/buildx/releases/download/v0.32.1/buildx-v0.32.1.openbsd-arm64.provenance.json",
"https://github.com/docker/buildx/releases/download/v0.32.1/buildx-v0.32.1.openbsd-arm64.sbom.json",
"https://github.com/docker/buildx/releases/download/v0.32.1/buildx-v0.32.1.openbsd-arm64.sigstore.json",
"https://github.com/docker/buildx/releases/download/v0.32.1/buildx-v0.32.1.windows-amd64.exe",
"https://github.com/docker/buildx/releases/download/v0.32.1/buildx-v0.32.1.windows-amd64.provenance.json",
"https://github.com/docker/buildx/releases/download/v0.32.1/buildx-v0.32.1.windows-amd64.sbom.json",
"https://github.com/docker/buildx/releases/download/v0.32.1/buildx-v0.32.1.windows-amd64.sigstore.json",
"https://github.com/docker/buildx/releases/download/v0.32.1/buildx-v0.32.1.windows-arm64.exe",
"https://github.com/docker/buildx/releases/download/v0.32.1/buildx-v0.32.1.windows-arm64.provenance.json",
"https://github.com/docker/buildx/releases/download/v0.32.1/buildx-v0.32.1.windows-arm64.sbom.json",
"https://github.com/docker/buildx/releases/download/v0.32.1/buildx-v0.32.1.windows-arm64.sigstore.json",
"https://github.com/docker/buildx/releases/download/v0.32.1/checksums.txt"
]
},
"v0.32.0-rc2": {
"id": 291436359,
"tag_name": "v0.32.0-rc2",
"html_url": "https://github.com/docker/buildx/releases/tag/v0.32.0-rc2",
"assets": [
"https://github.com/docker/buildx/releases/download/v0.32.0-rc2/buildx-v0.32.0-rc2.darwin-amd64",
"https://github.com/docker/buildx/releases/download/v0.32.0-rc2/buildx-v0.32.0-rc2.darwin-amd64.provenance.json",
"https://github.com/docker/buildx/releases/download/v0.32.0-rc2/buildx-v0.32.0-rc2.darwin-amd64.sbom.json",
"https://github.com/docker/buildx/releases/download/v0.32.0-rc2/buildx-v0.32.0-rc2.darwin-arm64",
"https://github.com/docker/buildx/releases/download/v0.32.0-rc2/buildx-v0.32.0-rc2.darwin-arm64.provenance.json",
"https://github.com/docker/buildx/releases/download/v0.32.0-rc2/buildx-v0.32.0-rc2.darwin-arm64.sbom.json",
"https://github.com/docker/buildx/releases/download/v0.32.0-rc2/buildx-v0.32.0-rc2.freebsd-amd64",
"https://github.com/docker/buildx/releases/download/v0.32.0-rc2/buildx-v0.32.0-rc2.freebsd-amd64.provenance.json",
"https://github.com/docker/buildx/releases/download/v0.32.0-rc2/buildx-v0.32.0-rc2.freebsd-amd64.sbom.json",
"https://github.com/docker/buildx/releases/download/v0.32.0-rc2/buildx-v0.32.0-rc2.freebsd-amd64.sigstore.json",
"https://github.com/docker/buildx/releases/download/v0.32.0-rc2/buildx-v0.32.0-rc2.freebsd-arm64",
"https://github.com/docker/buildx/releases/download/v0.32.0-rc2/buildx-v0.32.0-rc2.freebsd-arm64.provenance.json",
"https://github.com/docker/buildx/releases/download/v0.32.0-rc2/buildx-v0.32.0-rc2.freebsd-arm64.sbom.json",
"https://github.com/docker/buildx/releases/download/v0.32.0-rc2/buildx-v0.32.0-rc2.freebsd-arm64.sigstore.json",
"https://github.com/docker/buildx/releases/download/v0.32.0-rc2/buildx-v0.32.0-rc2.linux-amd64",
"https://github.com/docker/buildx/releases/download/v0.32.0-rc2/buildx-v0.32.0-rc2.linux-amd64.provenance.json",
"https://github.com/docker/buildx/releases/download/v0.32.0-rc2/buildx-v0.32.0-rc2.linux-amd64.sbom.json",
"https://github.com/docker/buildx/releases/download/v0.32.0-rc2/buildx-v0.32.0-rc2.linux-amd64.sigstore.json",
"https://github.com/docker/buildx/releases/download/v0.32.0-rc2/buildx-v0.32.0-rc2.linux-arm-v6",
"https://github.com/docker/buildx/releases/download/v0.32.0-rc2/buildx-v0.32.0-rc2.linux-arm-v6.provenance.json",
"https://github.com/docker/buildx/releases/download/v0.32.0-rc2/buildx-v0.32.0-rc2.linux-arm-v6.sbom.json",
"https://github.com/docker/buildx/releases/download/v0.32.0-rc2/buildx-v0.32.0-rc2.linux-arm-v6.sigstore.json",
"https://github.com/docker/buildx/releases/download/v0.32.0-rc2/buildx-v0.32.0-rc2.linux-arm-v7",
"https://github.com/docker/buildx/releases/download/v0.32.0-rc2/buildx-v0.32.0-rc2.linux-arm-v7.provenance.json",
"https://github.com/docker/buildx/releases/download/v0.32.0-rc2/buildx-v0.32.0-rc2.linux-arm-v7.sbom.json",
"https://github.com/docker/buildx/releases/download/v0.32.0-rc2/buildx-v0.32.0-rc2.linux-arm-v7.sigstore.json",
"https://github.com/docker/buildx/releases/download/v0.32.0-rc2/buildx-v0.32.0-rc2.linux-arm64",
"https://github.com/docker/buildx/releases/download/v0.32.0-rc2/buildx-v0.32.0-rc2.linux-arm64.provenance.json",
"https://github.com/docker/buildx/releases/download/v0.32.0-rc2/buildx-v0.32.0-rc2.linux-arm64.sbom.json",
"https://github.com/docker/buildx/releases/download/v0.32.0-rc2/buildx-v0.32.0-rc2.linux-arm64.sigstore.json",
"https://github.com/docker/buildx/releases/download/v0.32.0-rc2/buildx-v0.32.0-rc2.linux-ppc64le",
"https://github.com/docker/buildx/releases/download/v0.32.0-rc2/buildx-v0.32.0-rc2.linux-ppc64le.provenance.json",
"https://github.com/docker/buildx/releases/download/v0.32.0-rc2/buildx-v0.32.0-rc2.linux-ppc64le.sbom.json",
"https://github.com/docker/buildx/releases/download/v0.32.0-rc2/buildx-v0.32.0-rc2.linux-ppc64le.sigstore.json",
"https://github.com/docker/buildx/releases/download/v0.32.0-rc2/buildx-v0.32.0-rc2.linux-riscv64",
"https://github.com/docker/buildx/releases/download/v0.32.0-rc2/buildx-v0.32.0-rc2.linux-riscv64.provenance.json",
"https://github.com/docker/buildx/releases/download/v0.32.0-rc2/buildx-v0.32.0-rc2.linux-riscv64.sbom.json",
"https://github.com/docker/buildx/releases/download/v0.32.0-rc2/buildx-v0.32.0-rc2.linux-riscv64.sigstore.json",
"https://github.com/docker/buildx/releases/download/v0.32.0-rc2/buildx-v0.32.0-rc2.linux-s390x",
"https://github.com/docker/buildx/releases/download/v0.32.0-rc2/buildx-v0.32.0-rc2.linux-s390x.provenance.json",
"https://github.com/docker/buildx/releases/download/v0.32.0-rc2/buildx-v0.32.0-rc2.linux-s390x.sbom.json",
"https://github.com/docker/buildx/releases/download/v0.32.0-rc2/buildx-v0.32.0-rc2.linux-s390x.sigstore.json",
"https://github.com/docker/buildx/releases/download/v0.32.0-rc2/buildx-v0.32.0-rc2.netbsd-amd64",
"https://github.com/docker/buildx/releases/download/v0.32.0-rc2/buildx-v0.32.0-rc2.netbsd-amd64.provenance.json",
"https://github.com/docker/buildx/releases/download/v0.32.0-rc2/buildx-v0.32.0-rc2.netbsd-amd64.sbom.json",
"https://github.com/docker/buildx/releases/download/v0.32.0-rc2/buildx-v0.32.0-rc2.netbsd-amd64.sigstore.json",
"https://github.com/docker/buildx/releases/download/v0.32.0-rc2/buildx-v0.32.0-rc2.netbsd-arm64",
"https://github.com/docker/buildx/releases/download/v0.32.0-rc2/buildx-v0.32.0-rc2.netbsd-arm64.provenance.json",
"https://github.com/docker/buildx/releases/download/v0.32.0-rc2/buildx-v0.32.0-rc2.netbsd-arm64.sbom.json",
"https://github.com/docker/buildx/releases/download/v0.32.0-rc2/buildx-v0.32.0-rc2.netbsd-arm64.sigstore.json",
"https://github.com/docker/buildx/releases/download/v0.32.0-rc2/buildx-v0.32.0-rc2.openbsd-amd64",
"https://github.com/docker/buildx/releases/download/v0.32.0-rc2/buildx-v0.32.0-rc2.openbsd-amd64.provenance.json",
"https://github.com/docker/buildx/releases/download/v0.32.0-rc2/buildx-v0.32.0-rc2.openbsd-amd64.sbom.json",
"https://github.com/docker/buildx/releases/download/v0.32.0-rc2/buildx-v0.32.0-rc2.openbsd-amd64.sigstore.json",
"https://github.com/docker/buildx/releases/download/v0.32.0-rc2/buildx-v0.32.0-rc2.openbsd-arm64",
"https://github.com/docker/buildx/releases/download/v0.32.0-rc2/buildx-v0.32.0-rc2.openbsd-arm64.provenance.json",
"https://github.com/docker/buildx/releases/download/v0.32.0-rc2/buildx-v0.32.0-rc2.openbsd-arm64.sbom.json",
"https://github.com/docker/buildx/releases/download/v0.32.0-rc2/buildx-v0.32.0-rc2.openbsd-arm64.sigstore.json",
"https://github.com/docker/buildx/releases/download/v0.32.0-rc2/buildx-v0.32.0-rc2.windows-amd64.exe",
"https://github.com/docker/buildx/releases/download/v0.32.0-rc2/buildx-v0.32.0-rc2.windows-amd64.provenance.json",
"https://github.com/docker/buildx/releases/download/v0.32.0-rc2/buildx-v0.32.0-rc2.windows-amd64.sbom.json",
"https://github.com/docker/buildx/releases/download/v0.32.0-rc2/buildx-v0.32.0-rc2.windows-amd64.sigstore.json",
"https://github.com/docker/buildx/releases/download/v0.32.0-rc2/buildx-v0.32.0-rc2.windows-arm64.exe",
"https://github.com/docker/buildx/releases/download/v0.32.0-rc2/buildx-v0.32.0-rc2.windows-arm64.provenance.json",
"https://github.com/docker/buildx/releases/download/v0.32.0-rc2/buildx-v0.32.0-rc2.windows-arm64.sbom.json",
"https://github.com/docker/buildx/releases/download/v0.32.0-rc2/buildx-v0.32.0-rc2.windows-arm64.sigstore.json",
"https://github.com/docker/buildx/releases/download/v0.32.0-rc2/checksums.txt"
]
},
"v0.32.0-rc1": {
"id": 290111799,
"tag_name": "v0.32.0-rc1",
"html_url": "https://github.com/docker/buildx/releases/tag/v0.32.0-rc1",
"assets": [
"https://github.com/docker/buildx/releases/download/v0.32.0-rc1/buildx-v0.32.0-rc1.darwin-amd64",
"https://github.com/docker/buildx/releases/download/v0.32.0-rc1/buildx-v0.32.0-rc1.darwin-amd64.provenance.json",
"https://github.com/docker/buildx/releases/download/v0.32.0-rc1/buildx-v0.32.0-rc1.darwin-amd64.sbom.json",
"https://github.com/docker/buildx/releases/download/v0.32.0-rc1/buildx-v0.32.0-rc1.darwin-arm64",
"https://github.com/docker/buildx/releases/download/v0.32.0-rc1/buildx-v0.32.0-rc1.darwin-arm64.provenance.json",
"https://github.com/docker/buildx/releases/download/v0.32.0-rc1/buildx-v0.32.0-rc1.darwin-arm64.sbom.json",
"https://github.com/docker/buildx/releases/download/v0.32.0-rc1/buildx-v0.32.0-rc1.freebsd-amd64",
"https://github.com/docker/buildx/releases/download/v0.32.0-rc1/buildx-v0.32.0-rc1.freebsd-amd64.provenance.json",
"https://github.com/docker/buildx/releases/download/v0.32.0-rc1/buildx-v0.32.0-rc1.freebsd-amd64.sbom.json",
"https://github.com/docker/buildx/releases/download/v0.32.0-rc1/buildx-v0.32.0-rc1.freebsd-amd64.sigstore.json",
"https://github.com/docker/buildx/releases/download/v0.32.0-rc1/buildx-v0.32.0-rc1.freebsd-arm64",
"https://github.com/docker/buildx/releases/download/v0.32.0-rc1/buildx-v0.32.0-rc1.freebsd-arm64.provenance.json",
"https://github.com/docker/buildx/releases/download/v0.32.0-rc1/buildx-v0.32.0-rc1.freebsd-arm64.sbom.json",
"https://github.com/docker/buildx/releases/download/v0.32.0-rc1/buildx-v0.32.0-rc1.freebsd-arm64.sigstore.json",
"https://github.com/docker/buildx/releases/download/v0.32.0-rc1/buildx-v0.32.0-rc1.linux-amd64",
"https://github.com/docker/buildx/releases/download/v0.32.0-rc1/buildx-v0.32.0-rc1.linux-amd64.provenance.json",
"https://github.com/docker/buildx/releases/download/v0.32.0-rc1/buildx-v0.32.0-rc1.linux-amd64.sbom.json",
"https://github.com/docker/buildx/releases/download/v0.32.0-rc1/buildx-v0.32.0-rc1.linux-amd64.sigstore.json",
"https://github.com/docker/buildx/releases/download/v0.32.0-rc1/buildx-v0.32.0-rc1.linux-arm-v6",
"https://github.com/docker/buildx/releases/download/v0.32.0-rc1/buildx-v0.32.0-rc1.linux-arm-v6.provenance.json",
"https://github.com/docker/buildx/releases/download/v0.32.0-rc1/buildx-v0.32.0-rc1.linux-arm-v6.sbom.json",
"https://github.com/docker/buildx/releases/download/v0.32.0-rc1/buildx-v0.32.0-rc1.linux-arm-v6.sigstore.json",
"https://github.com/docker/buildx/releases/download/v0.32.0-rc1/buildx-v0.32.0-rc1.linux-arm-v7",
"https://github.com/docker/buildx/releases/download/v0.32.0-rc1/buildx-v0.32.0-rc1.linux-arm-v7.provenance.json",
"https://github.com/docker/buildx/releases/download/v0.32.0-rc1/buildx-v0.32.0-rc1.linux-arm-v7.sbom.json",
"https://github.com/docker/buildx/releases/download/v0.32.0-rc1/buildx-v0.32.0-rc1.linux-arm-v7.sigstore.json",
"https://github.com/docker/buildx/releases/download/v0.32.0-rc1/buildx-v0.32.0-rc1.linux-arm64",
"https://github.com/docker/buildx/releases/download/v0.32.0-rc1/buildx-v0.32.0-rc1.linux-arm64.provenance.json",
"https://github.com/docker/buildx/releases/download/v0.32.0-rc1/buildx-v0.32.0-rc1.linux-arm64.sbom.json",
"https://github.com/docker/buildx/releases/download/v0.32.0-rc1/buildx-v0.32.0-rc1.linux-arm64.sigstore.json",
"https://github.com/docker/buildx/releases/download/v0.32.0-rc1/buildx-v0.32.0-rc1.linux-ppc64le",
"https://github.com/docker/buildx/releases/download/v0.32.0-rc1/buildx-v0.32.0-rc1.linux-ppc64le.provenance.json",
"https://github.com/docker/buildx/releases/download/v0.32.0-rc1/buildx-v0.32.0-rc1.linux-ppc64le.sbom.json",
"https://github.com/docker/buildx/releases/download/v0.32.0-rc1/buildx-v0.32.0-rc1.linux-ppc64le.sigstore.json",
"https://github.com/docker/buildx/releases/download/v0.32.0-rc1/buildx-v0.32.0-rc1.linux-riscv64",
"https://github.com/docker/buildx/releases/download/v0.32.0-rc1/buildx-v0.32.0-rc1.linux-riscv64.provenance.json",
"https://github.com/docker/buildx/releases/download/v0.32.0-rc1/buildx-v0.32.0-rc1.linux-riscv64.sbom.json",
"https://github.com/docker/buildx/releases/download/v0.32.0-rc1/buildx-v0.32.0-rc1.linux-riscv64.sigstore.json",
"https://github.com/docker/buildx/releases/download/v0.32.0-rc1/buildx-v0.32.0-rc1.linux-s390x",
"https://github.com/docker/buildx/releases/download/v0.32.0-rc1/buildx-v0.32.0-rc1.linux-s390x.provenance.json",
"https://github.com/docker/buildx/releases/download/v0.32.0-rc1/buildx-v0.32.0-rc1.linux-s390x.sbom.json",
"https://github.com/docker/buildx/releases/download/v0.32.0-rc1/buildx-v0.32.0-rc1.linux-s390x.sigstore.json",
"https://github.com/docker/buildx/releases/download/v0.32.0-rc1/buildx-v0.32.0-rc1.netbsd-amd64",
"https://github.com/docker/buildx/releases/download/v0.32.0-rc1/buildx-v0.32.0-rc1.netbsd-amd64.provenance.json",
"https://github.com/docker/buildx/releases/download/v0.32.0-rc1/buildx-v0.32.0-rc1.netbsd-amd64.sbom.json",
"https://github.com/docker/buildx/releases/download/v0.32.0-rc1/buildx-v0.32.0-rc1.netbsd-amd64.sigstore.json",
"https://github.com/docker/buildx/releases/download/v0.32.0-rc1/buildx-v0.32.0-rc1.netbsd-arm64",
"https://github.com/docker/buildx/releases/download/v0.32.0-rc1/buildx-v0.32.0-rc1.netbsd-arm64.provenance.json",
"https://github.com/docker/buildx/releases/download/v0.32.0-rc1/buildx-v0.32.0-rc1.netbsd-arm64.sbom.json",
"https://github.com/docker/buildx/releases/download/v0.32.0-rc1/buildx-v0.32.0-rc1.netbsd-arm64.sigstore.json",
"https://github.com/docker/buildx/releases/download/v0.32.0-rc1/buildx-v0.32.0-rc1.openbsd-amd64",
"https://github.com/docker/buildx/releases/download/v0.32.0-rc1/buildx-v0.32.0-rc1.openbsd-amd64.provenance.json",
"https://github.com/docker/buildx/releases/download/v0.32.0-rc1/buildx-v0.32.0-rc1.openbsd-amd64.sbom.json",
"https://github.com/docker/buildx/releases/download/v0.32.0-rc1/buildx-v0.32.0-rc1.openbsd-amd64.sigstore.json",
"https://github.com/docker/buildx/releases/download/v0.32.0-rc1/buildx-v0.32.0-rc1.openbsd-arm64",
"https://github.com/docker/buildx/releases/download/v0.32.0-rc1/buildx-v0.32.0-rc1.openbsd-arm64.provenance.json",
"https://github.com/docker/buildx/releases/download/v0.32.0-rc1/buildx-v0.32.0-rc1.openbsd-arm64.sbom.json",
"https://github.com/docker/buildx/releases/download/v0.32.0-rc1/buildx-v0.32.0-rc1.openbsd-arm64.sigstore.json",
"https://github.com/docker/buildx/releases/download/v0.32.0-rc1/buildx-v0.32.0-rc1.windows-amd64.exe",
"https://github.com/docker/buildx/releases/download/v0.32.0-rc1/buildx-v0.32.0-rc1.windows-amd64.provenance.json",
"https://github.com/docker/buildx/releases/download/v0.32.0-rc1/buildx-v0.32.0-rc1.windows-amd64.sbom.json",
"https://github.com/docker/buildx/releases/download/v0.32.0-rc1/buildx-v0.32.0-rc1.windows-amd64.sigstore.json",
"https://github.com/docker/buildx/releases/download/v0.32.0-rc1/buildx-v0.32.0-rc1.windows-arm64.exe",
"https://github.com/docker/buildx/releases/download/v0.32.0-rc1/buildx-v0.32.0-rc1.windows-arm64.provenance.json",
"https://github.com/docker/buildx/releases/download/v0.32.0-rc1/buildx-v0.32.0-rc1.windows-arm64.sbom.json",
"https://github.com/docker/buildx/releases/download/v0.32.0-rc1/buildx-v0.32.0-rc1.windows-arm64.sigstore.json",
"https://github.com/docker/buildx/releases/download/v0.32.0-rc1/checksums.txt"
]
},
"v0.31.1": {
"id": 280887108,
"tag_name": "v0.31.1",
"html_url": "https://github.com/docker/buildx/releases/tag/v0.31.1",
"assets": [
"https://github.com/docker/buildx/releases/download/v0.31.1/buildx-v0.31.1.darwin-amd64",
"https://github.com/docker/buildx/releases/download/v0.31.1/buildx-v0.31.1.darwin-amd64.provenance.json",
"https://github.com/docker/buildx/releases/download/v0.31.1/buildx-v0.31.1.darwin-amd64.sbom.json",
"https://github.com/docker/buildx/releases/download/v0.31.1/buildx-v0.31.1.darwin-arm64",
"https://github.com/docker/buildx/releases/download/v0.31.1/buildx-v0.31.1.darwin-arm64.provenance.json",
"https://github.com/docker/buildx/releases/download/v0.31.1/buildx-v0.31.1.darwin-arm64.sbom.json",
"https://github.com/docker/buildx/releases/download/v0.31.1/buildx-v0.31.1.freebsd-amd64",
"https://github.com/docker/buildx/releases/download/v0.31.1/buildx-v0.31.1.freebsd-amd64.provenance.json",
"https://github.com/docker/buildx/releases/download/v0.31.1/buildx-v0.31.1.freebsd-amd64.sbom.json",
"https://github.com/docker/buildx/releases/download/v0.31.1/buildx-v0.31.1.freebsd-amd64.sigstore.json",
"https://github.com/docker/buildx/releases/download/v0.31.1/buildx-v0.31.1.freebsd-arm64",
"https://github.com/docker/buildx/releases/download/v0.31.1/buildx-v0.31.1.freebsd-arm64.provenance.json",
"https://github.com/docker/buildx/releases/download/v0.31.1/buildx-v0.31.1.freebsd-arm64.sbom.json",
"https://github.com/docker/buildx/releases/download/v0.31.1/buildx-v0.31.1.freebsd-arm64.sigstore.json",
"https://github.com/docker/buildx/releases/download/v0.31.1/buildx-v0.31.1.linux-amd64",
"https://github.com/docker/buildx/releases/download/v0.31.1/buildx-v0.31.1.linux-amd64.provenance.json",
"https://github.com/docker/buildx/releases/download/v0.31.1/buildx-v0.31.1.linux-amd64.sbom.json",
"https://github.com/docker/buildx/releases/download/v0.31.1/buildx-v0.31.1.linux-amd64.sigstore.json",
"https://github.com/docker/buildx/releases/download/v0.31.1/buildx-v0.31.1.linux-arm-v6",
"https://github.com/docker/buildx/releases/download/v0.31.1/buildx-v0.31.1.linux-arm-v6.provenance.json",
"https://github.com/docker/buildx/releases/download/v0.31.1/buildx-v0.31.1.linux-arm-v6.sbom.json",
"https://github.com/docker/buildx/releases/download/v0.31.1/buildx-v0.31.1.linux-arm-v6.sigstore.json",
"https://github.com/docker/buildx/releases/download/v0.31.1/buildx-v0.31.1.linux-arm-v7",
"https://github.com/docker/buildx/releases/download/v0.31.1/buildx-v0.31.1.linux-arm-v7.provenance.json",
"https://github.com/docker/buildx/releases/download/v0.31.1/buildx-v0.31.1.linux-arm-v7.sbom.json",
"https://github.com/docker/buildx/releases/download/v0.31.1/buildx-v0.31.1.linux-arm-v7.sigstore.json",
"https://github.com/docker/buildx/releases/download/v0.31.1/buildx-v0.31.1.linux-arm64",
"https://github.com/docker/buildx/releases/download/v0.31.1/buildx-v0.31.1.linux-arm64.provenance.json",
"https://github.com/docker/buildx/releases/download/v0.31.1/buildx-v0.31.1.linux-arm64.sbom.json",
"https://github.com/docker/buildx/releases/download/v0.31.1/buildx-v0.31.1.linux-arm64.sigstore.json",
"https://github.com/docker/buildx/releases/download/v0.31.1/buildx-v0.31.1.linux-ppc64le",
"https://github.com/docker/buildx/releases/download/v0.31.1/buildx-v0.31.1.linux-ppc64le.provenance.json",
"https://github.com/docker/buildx/releases/download/v0.31.1/buildx-v0.31.1.linux-ppc64le.sbom.json",
"https://github.com/docker/buildx/releases/download/v0.31.1/buildx-v0.31.1.linux-ppc64le.sigstore.json",
"https://github.com/docker/buildx/releases/download/v0.31.1/buildx-v0.31.1.linux-riscv64",
"https://github.com/docker/buildx/releases/download/v0.31.1/buildx-v0.31.1.linux-riscv64.provenance.json",
"https://github.com/docker/buildx/releases/download/v0.31.1/buildx-v0.31.1.linux-riscv64.sbom.json",
"https://github.com/docker/buildx/releases/download/v0.31.1/buildx-v0.31.1.linux-riscv64.sigstore.json",
"https://github.com/docker/buildx/releases/download/v0.31.1/buildx-v0.31.1.linux-s390x",
"https://github.com/docker/buildx/releases/download/v0.31.1/buildx-v0.31.1.linux-s390x.provenance.json",
"https://github.com/docker/buildx/releases/download/v0.31.1/buildx-v0.31.1.linux-s390x.sbom.json",
"https://github.com/docker/buildx/releases/download/v0.31.1/buildx-v0.31.1.linux-s390x.sigstore.json",
"https://github.com/docker/buildx/releases/download/v0.31.1/buildx-v0.31.1.netbsd-amd64",
"https://github.com/docker/buildx/releases/download/v0.31.1/buildx-v0.31.1.netbsd-amd64.provenance.json",
"https://github.com/docker/buildx/releases/download/v0.31.1/buildx-v0.31.1.netbsd-amd64.sbom.json",
"https://github.com/docker/buildx/releases/download/v0.31.1/buildx-v0.31.1.netbsd-amd64.sigstore.json",
"https://github.com/docker/buildx/releases/download/v0.31.1/buildx-v0.31.1.netbsd-arm64",
"https://github.com/docker/buildx/releases/download/v0.31.1/buildx-v0.31.1.netbsd-arm64.provenance.json",
"https://github.com/docker/buildx/releases/download/v0.31.1/buildx-v0.31.1.netbsd-arm64.sbom.json",
"https://github.com/docker/buildx/releases/download/v0.31.1/buildx-v0.31.1.netbsd-arm64.sigstore.json",
"https://github.com/docker/buildx/releases/download/v0.31.1/buildx-v0.31.1.openbsd-amd64",
"https://github.com/docker/buildx/releases/download/v0.31.1/buildx-v0.31.1.openbsd-amd64.provenance.json",
"https://github.com/docker/buildx/releases/download/v0.31.1/buildx-v0.31.1.openbsd-amd64.sbom.json",
"https://github.com/docker/buildx/releases/download/v0.31.1/buildx-v0.31.1.openbsd-amd64.sigstore.json",
"https://github.com/docker/buildx/releases/download/v0.31.1/buildx-v0.31.1.openbsd-arm64",
"https://github.com/docker/buildx/releases/download/v0.31.1/buildx-v0.31.1.openbsd-arm64.provenance.json",
"https://github.com/docker/buildx/releases/download/v0.31.1/buildx-v0.31.1.openbsd-arm64.sbom.json",
"https://github.com/docker/buildx/releases/download/v0.31.1/buildx-v0.31.1.openbsd-arm64.sigstore.json",
"https://github.com/docker/buildx/releases/download/v0.31.1/buildx-v0.31.1.windows-amd64.exe",
"https://github.com/docker/buildx/releases/download/v0.31.1/buildx-v0.31.1.windows-amd64.provenance.json",
"https://github.com/docker/buildx/releases/download/v0.31.1/buildx-v0.31.1.windows-amd64.sbom.json",
"https://github.com/docker/buildx/releases/download/v0.31.1/buildx-v0.31.1.windows-amd64.sigstore.json",
"https://github.com/docker/buildx/releases/download/v0.31.1/buildx-v0.31.1.windows-arm64.exe",
"https://github.com/docker/buildx/releases/download/v0.31.1/buildx-v0.31.1.windows-arm64.provenance.json",
"https://github.com/docker/buildx/releases/download/v0.31.1/buildx-v0.31.1.windows-arm64.sbom.json",
"https://github.com/docker/buildx/releases/download/v0.31.1/buildx-v0.31.1.windows-arm64.sigstore.json",
"https://github.com/docker/buildx/releases/download/v0.31.1/checksums.txt"
]
},
"v0.31.0": {
"id": 278817585,
"tag_name": "v0.31.0",
"html_url": "https://github.com/docker/buildx/releases/tag/v0.31.0",

View File

@@ -1,54 +1,128 @@
{
"latest": {
"id": 278255932,
"tag_name": "v5.0.2",
"html_url": "https://github.com/docker/compose/releases/tag/v5.0.2",
"id": 289948555,
"tag_name": "v5.1.0",
"html_url": "https://github.com/docker/compose/releases/tag/v5.1.0",
"assets": [
"https://github.com/docker/compose/releases/download/v5.0.2/checksums.txt",
"https://github.com/docker/compose/releases/download/v5.0.2/docker-compose-darwin-aarch64",
"https://github.com/docker/compose/releases/download/v5.0.2/docker-compose-darwin-aarch64.provenance.json",
"https://github.com/docker/compose/releases/download/v5.0.2/docker-compose-darwin-aarch64.sbom.json",
"https://github.com/docker/compose/releases/download/v5.0.2/docker-compose-darwin-aarch64.sha256",
"https://github.com/docker/compose/releases/download/v5.0.2/docker-compose-darwin-x86_64",
"https://github.com/docker/compose/releases/download/v5.0.2/docker-compose-darwin-x86_64.provenance.json",
"https://github.com/docker/compose/releases/download/v5.0.2/docker-compose-darwin-x86_64.sbom.json",
"https://github.com/docker/compose/releases/download/v5.0.2/docker-compose-darwin-x86_64.sha256",
"https://github.com/docker/compose/releases/download/v5.0.2/docker-compose-linux-aarch64",
"https://github.com/docker/compose/releases/download/v5.0.2/docker-compose-linux-aarch64.provenance.json",
"https://github.com/docker/compose/releases/download/v5.0.2/docker-compose-linux-aarch64.sbom.json",
"https://github.com/docker/compose/releases/download/v5.0.2/docker-compose-linux-aarch64.sha256",
"https://github.com/docker/compose/releases/download/v5.0.2/docker-compose-linux-armv6",
"https://github.com/docker/compose/releases/download/v5.0.2/docker-compose-linux-armv6.provenance.json",
"https://github.com/docker/compose/releases/download/v5.0.2/docker-compose-linux-armv6.sbom.json",
"https://github.com/docker/compose/releases/download/v5.0.2/docker-compose-linux-armv6.sha256",
"https://github.com/docker/compose/releases/download/v5.0.2/docker-compose-linux-armv7",
"https://github.com/docker/compose/releases/download/v5.0.2/docker-compose-linux-armv7.provenance.json",
"https://github.com/docker/compose/releases/download/v5.0.2/docker-compose-linux-armv7.sbom.json",
"https://github.com/docker/compose/releases/download/v5.0.2/docker-compose-linux-armv7.sha256",
"https://github.com/docker/compose/releases/download/v5.0.2/docker-compose-linux-ppc64le",
"https://github.com/docker/compose/releases/download/v5.0.2/docker-compose-linux-ppc64le.provenance.json",
"https://github.com/docker/compose/releases/download/v5.0.2/docker-compose-linux-ppc64le.sbom.json",
"https://github.com/docker/compose/releases/download/v5.0.2/docker-compose-linux-ppc64le.sha256",
"https://github.com/docker/compose/releases/download/v5.0.2/docker-compose-linux-riscv64",
"https://github.com/docker/compose/releases/download/v5.0.2/docker-compose-linux-riscv64.provenance.json",
"https://github.com/docker/compose/releases/download/v5.0.2/docker-compose-linux-riscv64.sbom.json",
"https://github.com/docker/compose/releases/download/v5.0.2/docker-compose-linux-riscv64.sha256",
"https://github.com/docker/compose/releases/download/v5.0.2/docker-compose-linux-s390x",
"https://github.com/docker/compose/releases/download/v5.0.2/docker-compose-linux-s390x.provenance.json",
"https://github.com/docker/compose/releases/download/v5.0.2/docker-compose-linux-s390x.sbom.json",
"https://github.com/docker/compose/releases/download/v5.0.2/docker-compose-linux-s390x.sha256",
"https://github.com/docker/compose/releases/download/v5.0.2/docker-compose-linux-x86_64",
"https://github.com/docker/compose/releases/download/v5.0.2/docker-compose-linux-x86_64.provenance.json",
"https://github.com/docker/compose/releases/download/v5.0.2/docker-compose-linux-x86_64.sbom.json",
"https://github.com/docker/compose/releases/download/v5.0.2/docker-compose-linux-x86_64.sha256",
"https://github.com/docker/compose/releases/download/v5.0.2/docker-compose-windows-aarch64.exe",
"https://github.com/docker/compose/releases/download/v5.0.2/docker-compose-windows-aarch64.exe.sha256",
"https://github.com/docker/compose/releases/download/v5.0.2/docker-compose-windows-aarch64.provenance.json",
"https://github.com/docker/compose/releases/download/v5.0.2/docker-compose-windows-aarch64.sbom.json",
"https://github.com/docker/compose/releases/download/v5.0.2/docker-compose-windows-x86_64.exe",
"https://github.com/docker/compose/releases/download/v5.0.2/docker-compose-windows-x86_64.exe.sha256",
"https://github.com/docker/compose/releases/download/v5.0.2/docker-compose-windows-x86_64.provenance.json",
"https://github.com/docker/compose/releases/download/v5.0.2/docker-compose-windows-x86_64.sbom.json"
"https://github.com/docker/compose/releases/download/v5.1.0/checksums.txt",
"https://github.com/docker/compose/releases/download/v5.1.0/docker-compose-darwin-aarch64",
"https://github.com/docker/compose/releases/download/v5.1.0/docker-compose-darwin-aarch64.provenance.json",
"https://github.com/docker/compose/releases/download/v5.1.0/docker-compose-darwin-aarch64.sbom.json",
"https://github.com/docker/compose/releases/download/v5.1.0/docker-compose-darwin-aarch64.sha256",
"https://github.com/docker/compose/releases/download/v5.1.0/docker-compose-darwin-aarch64.sigstore.json",
"https://github.com/docker/compose/releases/download/v5.1.0/docker-compose-darwin-x86_64",
"https://github.com/docker/compose/releases/download/v5.1.0/docker-compose-darwin-x86_64.provenance.json",
"https://github.com/docker/compose/releases/download/v5.1.0/docker-compose-darwin-x86_64.sbom.json",
"https://github.com/docker/compose/releases/download/v5.1.0/docker-compose-darwin-x86_64.sha256",
"https://github.com/docker/compose/releases/download/v5.1.0/docker-compose-darwin-x86_64.sigstore.json",
"https://github.com/docker/compose/releases/download/v5.1.0/docker-compose-linux-aarch64",
"https://github.com/docker/compose/releases/download/v5.1.0/docker-compose-linux-aarch64.provenance.json",
"https://github.com/docker/compose/releases/download/v5.1.0/docker-compose-linux-aarch64.sbom.json",
"https://github.com/docker/compose/releases/download/v5.1.0/docker-compose-linux-aarch64.sha256",
"https://github.com/docker/compose/releases/download/v5.1.0/docker-compose-linux-aarch64.sigstore.json",
"https://github.com/docker/compose/releases/download/v5.1.0/docker-compose-linux-armv6",
"https://github.com/docker/compose/releases/download/v5.1.0/docker-compose-linux-armv6.provenance.json",
"https://github.com/docker/compose/releases/download/v5.1.0/docker-compose-linux-armv6.sbom.json",
"https://github.com/docker/compose/releases/download/v5.1.0/docker-compose-linux-armv6.sha256",
"https://github.com/docker/compose/releases/download/v5.1.0/docker-compose-linux-armv6.sigstore.json",
"https://github.com/docker/compose/releases/download/v5.1.0/docker-compose-linux-armv7",
"https://github.com/docker/compose/releases/download/v5.1.0/docker-compose-linux-armv7.provenance.json",
"https://github.com/docker/compose/releases/download/v5.1.0/docker-compose-linux-armv7.sbom.json",
"https://github.com/docker/compose/releases/download/v5.1.0/docker-compose-linux-armv7.sha256",
"https://github.com/docker/compose/releases/download/v5.1.0/docker-compose-linux-armv7.sigstore.json",
"https://github.com/docker/compose/releases/download/v5.1.0/docker-compose-linux-ppc64le",
"https://github.com/docker/compose/releases/download/v5.1.0/docker-compose-linux-ppc64le.provenance.json",
"https://github.com/docker/compose/releases/download/v5.1.0/docker-compose-linux-ppc64le.sbom.json",
"https://github.com/docker/compose/releases/download/v5.1.0/docker-compose-linux-ppc64le.sha256",
"https://github.com/docker/compose/releases/download/v5.1.0/docker-compose-linux-ppc64le.sigstore.json",
"https://github.com/docker/compose/releases/download/v5.1.0/docker-compose-linux-riscv64",
"https://github.com/docker/compose/releases/download/v5.1.0/docker-compose-linux-riscv64.provenance.json",
"https://github.com/docker/compose/releases/download/v5.1.0/docker-compose-linux-riscv64.sbom.json",
"https://github.com/docker/compose/releases/download/v5.1.0/docker-compose-linux-riscv64.sha256",
"https://github.com/docker/compose/releases/download/v5.1.0/docker-compose-linux-riscv64.sigstore.json",
"https://github.com/docker/compose/releases/download/v5.1.0/docker-compose-linux-s390x",
"https://github.com/docker/compose/releases/download/v5.1.0/docker-compose-linux-s390x.provenance.json",
"https://github.com/docker/compose/releases/download/v5.1.0/docker-compose-linux-s390x.sbom.json",
"https://github.com/docker/compose/releases/download/v5.1.0/docker-compose-linux-s390x.sha256",
"https://github.com/docker/compose/releases/download/v5.1.0/docker-compose-linux-s390x.sigstore.json",
"https://github.com/docker/compose/releases/download/v5.1.0/docker-compose-linux-x86_64",
"https://github.com/docker/compose/releases/download/v5.1.0/docker-compose-linux-x86_64.provenance.json",
"https://github.com/docker/compose/releases/download/v5.1.0/docker-compose-linux-x86_64.sbom.json",
"https://github.com/docker/compose/releases/download/v5.1.0/docker-compose-linux-x86_64.sha256",
"https://github.com/docker/compose/releases/download/v5.1.0/docker-compose-linux-x86_64.sigstore.json",
"https://github.com/docker/compose/releases/download/v5.1.0/docker-compose-windows-aarch64.exe",
"https://github.com/docker/compose/releases/download/v5.1.0/docker-compose-windows-aarch64.exe.sha256",
"https://github.com/docker/compose/releases/download/v5.1.0/docker-compose-windows-aarch64.provenance.json",
"https://github.com/docker/compose/releases/download/v5.1.0/docker-compose-windows-aarch64.sbom.json",
"https://github.com/docker/compose/releases/download/v5.1.0/docker-compose-windows-aarch64.sigstore.json",
"https://github.com/docker/compose/releases/download/v5.1.0/docker-compose-windows-x86_64.exe",
"https://github.com/docker/compose/releases/download/v5.1.0/docker-compose-windows-x86_64.exe.sha256",
"https://github.com/docker/compose/releases/download/v5.1.0/docker-compose-windows-x86_64.provenance.json",
"https://github.com/docker/compose/releases/download/v5.1.0/docker-compose-windows-x86_64.sbom.json",
"https://github.com/docker/compose/releases/download/v5.1.0/docker-compose-windows-x86_64.sigstore.json"
]
},
"v5.1.0": {
"id": 289948555,
"tag_name": "v5.1.0",
"html_url": "https://github.com/docker/compose/releases/tag/v5.1.0",
"assets": [
"https://github.com/docker/compose/releases/download/v5.1.0/checksums.txt",
"https://github.com/docker/compose/releases/download/v5.1.0/docker-compose-darwin-aarch64",
"https://github.com/docker/compose/releases/download/v5.1.0/docker-compose-darwin-aarch64.provenance.json",
"https://github.com/docker/compose/releases/download/v5.1.0/docker-compose-darwin-aarch64.sbom.json",
"https://github.com/docker/compose/releases/download/v5.1.0/docker-compose-darwin-aarch64.sha256",
"https://github.com/docker/compose/releases/download/v5.1.0/docker-compose-darwin-aarch64.sigstore.json",
"https://github.com/docker/compose/releases/download/v5.1.0/docker-compose-darwin-x86_64",
"https://github.com/docker/compose/releases/download/v5.1.0/docker-compose-darwin-x86_64.provenance.json",
"https://github.com/docker/compose/releases/download/v5.1.0/docker-compose-darwin-x86_64.sbom.json",
"https://github.com/docker/compose/releases/download/v5.1.0/docker-compose-darwin-x86_64.sha256",
"https://github.com/docker/compose/releases/download/v5.1.0/docker-compose-darwin-x86_64.sigstore.json",
"https://github.com/docker/compose/releases/download/v5.1.0/docker-compose-linux-aarch64",
"https://github.com/docker/compose/releases/download/v5.1.0/docker-compose-linux-aarch64.provenance.json",
"https://github.com/docker/compose/releases/download/v5.1.0/docker-compose-linux-aarch64.sbom.json",
"https://github.com/docker/compose/releases/download/v5.1.0/docker-compose-linux-aarch64.sha256",
"https://github.com/docker/compose/releases/download/v5.1.0/docker-compose-linux-aarch64.sigstore.json",
"https://github.com/docker/compose/releases/download/v5.1.0/docker-compose-linux-armv6",
"https://github.com/docker/compose/releases/download/v5.1.0/docker-compose-linux-armv6.provenance.json",
"https://github.com/docker/compose/releases/download/v5.1.0/docker-compose-linux-armv6.sbom.json",
"https://github.com/docker/compose/releases/download/v5.1.0/docker-compose-linux-armv6.sha256",
"https://github.com/docker/compose/releases/download/v5.1.0/docker-compose-linux-armv6.sigstore.json",
"https://github.com/docker/compose/releases/download/v5.1.0/docker-compose-linux-armv7",
"https://github.com/docker/compose/releases/download/v5.1.0/docker-compose-linux-armv7.provenance.json",
"https://github.com/docker/compose/releases/download/v5.1.0/docker-compose-linux-armv7.sbom.json",
"https://github.com/docker/compose/releases/download/v5.1.0/docker-compose-linux-armv7.sha256",
"https://github.com/docker/compose/releases/download/v5.1.0/docker-compose-linux-armv7.sigstore.json",
"https://github.com/docker/compose/releases/download/v5.1.0/docker-compose-linux-ppc64le",
"https://github.com/docker/compose/releases/download/v5.1.0/docker-compose-linux-ppc64le.provenance.json",
"https://github.com/docker/compose/releases/download/v5.1.0/docker-compose-linux-ppc64le.sbom.json",
"https://github.com/docker/compose/releases/download/v5.1.0/docker-compose-linux-ppc64le.sha256",
"https://github.com/docker/compose/releases/download/v5.1.0/docker-compose-linux-ppc64le.sigstore.json",
"https://github.com/docker/compose/releases/download/v5.1.0/docker-compose-linux-riscv64",
"https://github.com/docker/compose/releases/download/v5.1.0/docker-compose-linux-riscv64.provenance.json",
"https://github.com/docker/compose/releases/download/v5.1.0/docker-compose-linux-riscv64.sbom.json",
"https://github.com/docker/compose/releases/download/v5.1.0/docker-compose-linux-riscv64.sha256",
"https://github.com/docker/compose/releases/download/v5.1.0/docker-compose-linux-riscv64.sigstore.json",
"https://github.com/docker/compose/releases/download/v5.1.0/docker-compose-linux-s390x",
"https://github.com/docker/compose/releases/download/v5.1.0/docker-compose-linux-s390x.provenance.json",
"https://github.com/docker/compose/releases/download/v5.1.0/docker-compose-linux-s390x.sbom.json",
"https://github.com/docker/compose/releases/download/v5.1.0/docker-compose-linux-s390x.sha256",
"https://github.com/docker/compose/releases/download/v5.1.0/docker-compose-linux-s390x.sigstore.json",
"https://github.com/docker/compose/releases/download/v5.1.0/docker-compose-linux-x86_64",
"https://github.com/docker/compose/releases/download/v5.1.0/docker-compose-linux-x86_64.provenance.json",
"https://github.com/docker/compose/releases/download/v5.1.0/docker-compose-linux-x86_64.sbom.json",
"https://github.com/docker/compose/releases/download/v5.1.0/docker-compose-linux-x86_64.sha256",
"https://github.com/docker/compose/releases/download/v5.1.0/docker-compose-linux-x86_64.sigstore.json",
"https://github.com/docker/compose/releases/download/v5.1.0/docker-compose-windows-aarch64.exe",
"https://github.com/docker/compose/releases/download/v5.1.0/docker-compose-windows-aarch64.exe.sha256",
"https://github.com/docker/compose/releases/download/v5.1.0/docker-compose-windows-aarch64.provenance.json",
"https://github.com/docker/compose/releases/download/v5.1.0/docker-compose-windows-aarch64.sbom.json",
"https://github.com/docker/compose/releases/download/v5.1.0/docker-compose-windows-aarch64.sigstore.json",
"https://github.com/docker/compose/releases/download/v5.1.0/docker-compose-windows-x86_64.exe",
"https://github.com/docker/compose/releases/download/v5.1.0/docker-compose-windows-x86_64.exe.sha256",
"https://github.com/docker/compose/releases/download/v5.1.0/docker-compose-windows-x86_64.provenance.json",
"https://github.com/docker/compose/releases/download/v5.1.0/docker-compose-windows-x86_64.sbom.json",
"https://github.com/docker/compose/releases/download/v5.1.0/docker-compose-windows-x86_64.sigstore.json"
]
},
"v5.0.2": {
@@ -208,55 +282,66 @@
]
},
"edge": {
"id": 278255932,
"tag_name": "v5.0.2",
"html_url": "https://github.com/docker/compose/releases/tag/v5.0.2",
"id": 289948555,
"tag_name": "v5.1.0",
"html_url": "https://github.com/docker/compose/releases/tag/v5.1.0",
"assets": [
"https://github.com/docker/compose/releases/download/v5.0.2/checksums.txt",
"https://github.com/docker/compose/releases/download/v5.0.2/docker-compose-darwin-aarch64",
"https://github.com/docker/compose/releases/download/v5.0.2/docker-compose-darwin-aarch64.provenance.json",
"https://github.com/docker/compose/releases/download/v5.0.2/docker-compose-darwin-aarch64.sbom.json",
"https://github.com/docker/compose/releases/download/v5.0.2/docker-compose-darwin-aarch64.sha256",
"https://github.com/docker/compose/releases/download/v5.0.2/docker-compose-darwin-x86_64",
"https://github.com/docker/compose/releases/download/v5.0.2/docker-compose-darwin-x86_64.provenance.json",
"https://github.com/docker/compose/releases/download/v5.0.2/docker-compose-darwin-x86_64.sbom.json",
"https://github.com/docker/compose/releases/download/v5.0.2/docker-compose-darwin-x86_64.sha256",
"https://github.com/docker/compose/releases/download/v5.0.2/docker-compose-linux-aarch64",
"https://github.com/docker/compose/releases/download/v5.0.2/docker-compose-linux-aarch64.provenance.json",
"https://github.com/docker/compose/releases/download/v5.0.2/docker-compose-linux-aarch64.sbom.json",
"https://github.com/docker/compose/releases/download/v5.0.2/docker-compose-linux-aarch64.sha256",
"https://github.com/docker/compose/releases/download/v5.0.2/docker-compose-linux-armv6",
"https://github.com/docker/compose/releases/download/v5.0.2/docker-compose-linux-armv6.provenance.json",
"https://github.com/docker/compose/releases/download/v5.0.2/docker-compose-linux-armv6.sbom.json",
"https://github.com/docker/compose/releases/download/v5.0.2/docker-compose-linux-armv6.sha256",
"https://github.com/docker/compose/releases/download/v5.0.2/docker-compose-linux-armv7",
"https://github.com/docker/compose/releases/download/v5.0.2/docker-compose-linux-armv7.provenance.json",
"https://github.com/docker/compose/releases/download/v5.0.2/docker-compose-linux-armv7.sbom.json",
"https://github.com/docker/compose/releases/download/v5.0.2/docker-compose-linux-armv7.sha256",
"https://github.com/docker/compose/releases/download/v5.0.2/docker-compose-linux-ppc64le",
"https://github.com/docker/compose/releases/download/v5.0.2/docker-compose-linux-ppc64le.provenance.json",
"https://github.com/docker/compose/releases/download/v5.0.2/docker-compose-linux-ppc64le.sbom.json",
"https://github.com/docker/compose/releases/download/v5.0.2/docker-compose-linux-ppc64le.sha256",
"https://github.com/docker/compose/releases/download/v5.0.2/docker-compose-linux-riscv64",
"https://github.com/docker/compose/releases/download/v5.0.2/docker-compose-linux-riscv64.provenance.json",
"https://github.com/docker/compose/releases/download/v5.0.2/docker-compose-linux-riscv64.sbom.json",
"https://github.com/docker/compose/releases/download/v5.0.2/docker-compose-linux-riscv64.sha256",
"https://github.com/docker/compose/releases/download/v5.0.2/docker-compose-linux-s390x",
"https://github.com/docker/compose/releases/download/v5.0.2/docker-compose-linux-s390x.provenance.json",
"https://github.com/docker/compose/releases/download/v5.0.2/docker-compose-linux-s390x.sbom.json",
"https://github.com/docker/compose/releases/download/v5.0.2/docker-compose-linux-s390x.sha256",
"https://github.com/docker/compose/releases/download/v5.0.2/docker-compose-linux-x86_64",
"https://github.com/docker/compose/releases/download/v5.0.2/docker-compose-linux-x86_64.provenance.json",
"https://github.com/docker/compose/releases/download/v5.0.2/docker-compose-linux-x86_64.sbom.json",
"https://github.com/docker/compose/releases/download/v5.0.2/docker-compose-linux-x86_64.sha256",
"https://github.com/docker/compose/releases/download/v5.0.2/docker-compose-windows-aarch64.exe",
"https://github.com/docker/compose/releases/download/v5.0.2/docker-compose-windows-aarch64.exe.sha256",
"https://github.com/docker/compose/releases/download/v5.0.2/docker-compose-windows-aarch64.provenance.json",
"https://github.com/docker/compose/releases/download/v5.0.2/docker-compose-windows-aarch64.sbom.json",
"https://github.com/docker/compose/releases/download/v5.0.2/docker-compose-windows-x86_64.exe",
"https://github.com/docker/compose/releases/download/v5.0.2/docker-compose-windows-x86_64.exe.sha256",
"https://github.com/docker/compose/releases/download/v5.0.2/docker-compose-windows-x86_64.provenance.json",
"https://github.com/docker/compose/releases/download/v5.0.2/docker-compose-windows-x86_64.sbom.json"
"https://github.com/docker/compose/releases/download/v5.1.0/checksums.txt",
"https://github.com/docker/compose/releases/download/v5.1.0/docker-compose-darwin-aarch64",
"https://github.com/docker/compose/releases/download/v5.1.0/docker-compose-darwin-aarch64.provenance.json",
"https://github.com/docker/compose/releases/download/v5.1.0/docker-compose-darwin-aarch64.sbom.json",
"https://github.com/docker/compose/releases/download/v5.1.0/docker-compose-darwin-aarch64.sha256",
"https://github.com/docker/compose/releases/download/v5.1.0/docker-compose-darwin-aarch64.sigstore.json",
"https://github.com/docker/compose/releases/download/v5.1.0/docker-compose-darwin-x86_64",
"https://github.com/docker/compose/releases/download/v5.1.0/docker-compose-darwin-x86_64.provenance.json",
"https://github.com/docker/compose/releases/download/v5.1.0/docker-compose-darwin-x86_64.sbom.json",
"https://github.com/docker/compose/releases/download/v5.1.0/docker-compose-darwin-x86_64.sha256",
"https://github.com/docker/compose/releases/download/v5.1.0/docker-compose-darwin-x86_64.sigstore.json",
"https://github.com/docker/compose/releases/download/v5.1.0/docker-compose-linux-aarch64",
"https://github.com/docker/compose/releases/download/v5.1.0/docker-compose-linux-aarch64.provenance.json",
"https://github.com/docker/compose/releases/download/v5.1.0/docker-compose-linux-aarch64.sbom.json",
"https://github.com/docker/compose/releases/download/v5.1.0/docker-compose-linux-aarch64.sha256",
"https://github.com/docker/compose/releases/download/v5.1.0/docker-compose-linux-aarch64.sigstore.json",
"https://github.com/docker/compose/releases/download/v5.1.0/docker-compose-linux-armv6",
"https://github.com/docker/compose/releases/download/v5.1.0/docker-compose-linux-armv6.provenance.json",
"https://github.com/docker/compose/releases/download/v5.1.0/docker-compose-linux-armv6.sbom.json",
"https://github.com/docker/compose/releases/download/v5.1.0/docker-compose-linux-armv6.sha256",
"https://github.com/docker/compose/releases/download/v5.1.0/docker-compose-linux-armv6.sigstore.json",
"https://github.com/docker/compose/releases/download/v5.1.0/docker-compose-linux-armv7",
"https://github.com/docker/compose/releases/download/v5.1.0/docker-compose-linux-armv7.provenance.json",
"https://github.com/docker/compose/releases/download/v5.1.0/docker-compose-linux-armv7.sbom.json",
"https://github.com/docker/compose/releases/download/v5.1.0/docker-compose-linux-armv7.sha256",
"https://github.com/docker/compose/releases/download/v5.1.0/docker-compose-linux-armv7.sigstore.json",
"https://github.com/docker/compose/releases/download/v5.1.0/docker-compose-linux-ppc64le",
"https://github.com/docker/compose/releases/download/v5.1.0/docker-compose-linux-ppc64le.provenance.json",
"https://github.com/docker/compose/releases/download/v5.1.0/docker-compose-linux-ppc64le.sbom.json",
"https://github.com/docker/compose/releases/download/v5.1.0/docker-compose-linux-ppc64le.sha256",
"https://github.com/docker/compose/releases/download/v5.1.0/docker-compose-linux-ppc64le.sigstore.json",
"https://github.com/docker/compose/releases/download/v5.1.0/docker-compose-linux-riscv64",
"https://github.com/docker/compose/releases/download/v5.1.0/docker-compose-linux-riscv64.provenance.json",
"https://github.com/docker/compose/releases/download/v5.1.0/docker-compose-linux-riscv64.sbom.json",
"https://github.com/docker/compose/releases/download/v5.1.0/docker-compose-linux-riscv64.sha256",
"https://github.com/docker/compose/releases/download/v5.1.0/docker-compose-linux-riscv64.sigstore.json",
"https://github.com/docker/compose/releases/download/v5.1.0/docker-compose-linux-s390x",
"https://github.com/docker/compose/releases/download/v5.1.0/docker-compose-linux-s390x.provenance.json",
"https://github.com/docker/compose/releases/download/v5.1.0/docker-compose-linux-s390x.sbom.json",
"https://github.com/docker/compose/releases/download/v5.1.0/docker-compose-linux-s390x.sha256",
"https://github.com/docker/compose/releases/download/v5.1.0/docker-compose-linux-s390x.sigstore.json",
"https://github.com/docker/compose/releases/download/v5.1.0/docker-compose-linux-x86_64",
"https://github.com/docker/compose/releases/download/v5.1.0/docker-compose-linux-x86_64.provenance.json",
"https://github.com/docker/compose/releases/download/v5.1.0/docker-compose-linux-x86_64.sbom.json",
"https://github.com/docker/compose/releases/download/v5.1.0/docker-compose-linux-x86_64.sha256",
"https://github.com/docker/compose/releases/download/v5.1.0/docker-compose-linux-x86_64.sigstore.json",
"https://github.com/docker/compose/releases/download/v5.1.0/docker-compose-windows-aarch64.exe",
"https://github.com/docker/compose/releases/download/v5.1.0/docker-compose-windows-aarch64.exe.sha256",
"https://github.com/docker/compose/releases/download/v5.1.0/docker-compose-windows-aarch64.provenance.json",
"https://github.com/docker/compose/releases/download/v5.1.0/docker-compose-windows-aarch64.sbom.json",
"https://github.com/docker/compose/releases/download/v5.1.0/docker-compose-windows-aarch64.sigstore.json",
"https://github.com/docker/compose/releases/download/v5.1.0/docker-compose-windows-x86_64.exe",
"https://github.com/docker/compose/releases/download/v5.1.0/docker-compose-windows-x86_64.exe.sha256",
"https://github.com/docker/compose/releases/download/v5.1.0/docker-compose-windows-x86_64.provenance.json",
"https://github.com/docker/compose/releases/download/v5.1.0/docker-compose-windows-x86_64.sbom.json",
"https://github.com/docker/compose/releases/download/v5.1.0/docker-compose-windows-x86_64.sigstore.json"
]
},
"v5.0.0-rc.2": {

View File

@@ -1,92 +1,182 @@
{
"latest": {
"id": 275625037,
"tag_name": "v3.0.4",
"html_url": "https://github.com/sigstore/cosign/releases/tag/v3.0.4",
"id": 288413621,
"tag_name": "v3.0.5",
"html_url": "https://github.com/sigstore/cosign/releases/tag/v3.0.5",
"assets": [
"https://github.com/sigstore/cosign/releases/download/v3.0.4/cosign-3.0.4-1.aarch64.rpm",
"https://github.com/sigstore/cosign/releases/download/v3.0.4/cosign-3.0.4-1.aarch64.rpm.sigstore.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.4/cosign-3.0.4-1.armv7hl.rpm",
"https://github.com/sigstore/cosign/releases/download/v3.0.4/cosign-3.0.4-1.armv7hl.rpm.sigstore.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.4/cosign-3.0.4-1.ppc64le.rpm",
"https://github.com/sigstore/cosign/releases/download/v3.0.4/cosign-3.0.4-1.ppc64le.rpm.sigstore.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.4/cosign-3.0.4-1.riscv64.rpm",
"https://github.com/sigstore/cosign/releases/download/v3.0.4/cosign-3.0.4-1.riscv64.rpm.sigstore.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.4/cosign-3.0.4-1.s390x.rpm",
"https://github.com/sigstore/cosign/releases/download/v3.0.4/cosign-3.0.4-1.s390x.rpm.sigstore.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.4/cosign-3.0.4-1.x86_64.rpm",
"https://github.com/sigstore/cosign/releases/download/v3.0.4/cosign-3.0.4-1.x86_64.rpm.sigstore.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.4/cosign-darwin-amd64",
"https://github.com/sigstore/cosign/releases/download/v3.0.4/cosign-darwin-amd64-kms.sigstore.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.4/cosign-darwin-amd64.sigstore.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.4/cosign-darwin-amd64_3.0.4_darwin_amd64.sbom.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.4/cosign-darwin-arm64",
"https://github.com/sigstore/cosign/releases/download/v3.0.4/cosign-darwin-arm64-kms.sigstore.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.4/cosign-darwin-arm64.sigstore.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.4/cosign-darwin-arm64_3.0.4_darwin_arm64.sbom.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.4/cosign-linux-amd64",
"https://github.com/sigstore/cosign/releases/download/v3.0.4/cosign-linux-amd64-kms.sigstore.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.4/cosign-linux-amd64.sigstore.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.4/cosign-linux-amd64_3.0.4_linux_amd64.sbom.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.4/cosign-linux-arm",
"https://github.com/sigstore/cosign/releases/download/v3.0.4/cosign-linux-arm-kms.sigstore.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.4/cosign-linux-arm.sigstore.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.4/cosign-linux-arm64",
"https://github.com/sigstore/cosign/releases/download/v3.0.4/cosign-linux-arm64-kms.sigstore.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.4/cosign-linux-arm64.sigstore.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.4/cosign-linux-arm64_3.0.4_linux_arm64.sbom.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.4/cosign-linux-arm_3.0.4_linux_arm.sbom.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.4/cosign-linux-pivkey-pkcs11key-amd64",
"https://github.com/sigstore/cosign/releases/download/v3.0.4/cosign-linux-pivkey-pkcs11key-amd64-kms.sigstore.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.4/cosign-linux-pivkey-pkcs11key-amd64.sigstore.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.4/cosign-linux-pivkey-pkcs11key-amd64_3.0.4_linux_amd64.sbom.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.4/cosign-linux-pivkey-pkcs11key-arm64",
"https://github.com/sigstore/cosign/releases/download/v3.0.4/cosign-linux-pivkey-pkcs11key-arm64-kms.sigstore.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.4/cosign-linux-pivkey-pkcs11key-arm64.sigstore.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.4/cosign-linux-pivkey-pkcs11key-arm64_3.0.4_linux_arm64.sbom.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.4/cosign-linux-ppc64le",
"https://github.com/sigstore/cosign/releases/download/v3.0.4/cosign-linux-ppc64le-kms.sigstore.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.4/cosign-linux-ppc64le.sigstore.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.4/cosign-linux-ppc64le_3.0.4_linux_ppc64le.sbom.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.4/cosign-linux-riscv64",
"https://github.com/sigstore/cosign/releases/download/v3.0.4/cosign-linux-riscv64-kms.sigstore.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.4/cosign-linux-riscv64.sigstore.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.4/cosign-linux-riscv64_3.0.4_linux_riscv64.sbom.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.4/cosign-linux-s390x",
"https://github.com/sigstore/cosign/releases/download/v3.0.4/cosign-linux-s390x-kms.sigstore.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.4/cosign-linux-s390x.sigstore.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.4/cosign-linux-s390x_3.0.4_linux_s390x.sbom.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.4/cosign-windows-amd64.exe",
"https://github.com/sigstore/cosign/releases/download/v3.0.4/cosign-windows-amd64.exe-kms.sigstore.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.4/cosign-windows-amd64.exe.sigstore.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.4/cosign-windows-amd64.exe_3.0.4_windows_amd64.sbom.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.4/cosign_3.0.4_aarch64.apk",
"https://github.com/sigstore/cosign/releases/download/v3.0.4/cosign_3.0.4_aarch64.apk.sigstore.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.4/cosign_3.0.4_amd64.deb",
"https://github.com/sigstore/cosign/releases/download/v3.0.4/cosign_3.0.4_amd64.deb.sigstore.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.4/cosign_3.0.4_arm64.deb",
"https://github.com/sigstore/cosign/releases/download/v3.0.4/cosign_3.0.4_arm64.deb.sigstore.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.4/cosign_3.0.4_armhf.deb",
"https://github.com/sigstore/cosign/releases/download/v3.0.4/cosign_3.0.4_armhf.deb.sigstore.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.4/cosign_3.0.4_armv7.apk",
"https://github.com/sigstore/cosign/releases/download/v3.0.4/cosign_3.0.4_armv7.apk.sigstore.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.4/cosign_3.0.4_ppc64el.deb",
"https://github.com/sigstore/cosign/releases/download/v3.0.4/cosign_3.0.4_ppc64el.deb.sigstore.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.4/cosign_3.0.4_ppc64le.apk",
"https://github.com/sigstore/cosign/releases/download/v3.0.4/cosign_3.0.4_ppc64le.apk.sigstore.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.4/cosign_3.0.4_riscv64.apk",
"https://github.com/sigstore/cosign/releases/download/v3.0.4/cosign_3.0.4_riscv64.apk.sigstore.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.4/cosign_3.0.4_riscv64.deb",
"https://github.com/sigstore/cosign/releases/download/v3.0.4/cosign_3.0.4_riscv64.deb.sigstore.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.4/cosign_3.0.4_s390x.apk",
"https://github.com/sigstore/cosign/releases/download/v3.0.4/cosign_3.0.4_s390x.apk.sigstore.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.4/cosign_3.0.4_s390x.deb",
"https://github.com/sigstore/cosign/releases/download/v3.0.4/cosign_3.0.4_s390x.deb.sigstore.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.4/cosign_3.0.4_x86_64.apk",
"https://github.com/sigstore/cosign/releases/download/v3.0.4/cosign_3.0.4_x86_64.apk.sigstore.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.4/cosign_checksums.txt",
"https://github.com/sigstore/cosign/releases/download/v3.0.4/cosign_checksums.txt.sigstore.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.4/release-cosign.pub"
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign-3.0.5-1.aarch64.rpm",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign-3.0.5-1.aarch64.rpm.sigstore.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign-3.0.5-1.armv7hl.rpm",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign-3.0.5-1.armv7hl.rpm.sigstore.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign-3.0.5-1.ppc64le.rpm",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign-3.0.5-1.ppc64le.rpm.sigstore.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign-3.0.5-1.riscv64.rpm",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign-3.0.5-1.riscv64.rpm.sigstore.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign-3.0.5-1.s390x.rpm",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign-3.0.5-1.s390x.rpm.sigstore.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign-3.0.5-1.x86_64.rpm",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign-3.0.5-1.x86_64.rpm.sigstore.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign-darwin-amd64",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign-darwin-amd64-kms.sigstore.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign-darwin-amd64.sigstore.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign-darwin-amd64_3.0.5_darwin_amd64.sbom.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign-darwin-arm64",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign-darwin-arm64-kms.sigstore.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign-darwin-arm64.sigstore.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign-darwin-arm64_3.0.5_darwin_arm64.sbom.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign-linux-amd64",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign-linux-amd64-kms.sigstore.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign-linux-amd64.sigstore.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign-linux-amd64_3.0.5_linux_amd64.sbom.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign-linux-arm",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign-linux-arm-kms.sigstore.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign-linux-arm.sigstore.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign-linux-arm64",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign-linux-arm64-kms.sigstore.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign-linux-arm64.sigstore.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign-linux-arm64_3.0.5_linux_arm64.sbom.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign-linux-arm_3.0.5_linux_arm.sbom.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign-linux-pivkey-pkcs11key-amd64",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign-linux-pivkey-pkcs11key-amd64-kms.sigstore.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign-linux-pivkey-pkcs11key-amd64.sigstore.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign-linux-pivkey-pkcs11key-amd64_3.0.5_linux_amd64.sbom.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign-linux-pivkey-pkcs11key-arm64",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign-linux-pivkey-pkcs11key-arm64-kms.sigstore.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign-linux-pivkey-pkcs11key-arm64.sigstore.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign-linux-pivkey-pkcs11key-arm64_3.0.5_linux_arm64.sbom.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign-linux-ppc64le",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign-linux-ppc64le-kms.sigstore.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign-linux-ppc64le.sigstore.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign-linux-ppc64le_3.0.5_linux_ppc64le.sbom.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign-linux-riscv64",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign-linux-riscv64-kms.sigstore.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign-linux-riscv64.sigstore.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign-linux-riscv64_3.0.5_linux_riscv64.sbom.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign-linux-s390x",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign-linux-s390x-kms.sigstore.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign-linux-s390x.sigstore.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign-linux-s390x_3.0.5_linux_s390x.sbom.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign-windows-amd64.exe",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign-windows-amd64.exe-kms.sigstore.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign-windows-amd64.exe.sigstore.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign-windows-amd64.exe_3.0.5_windows_amd64.sbom.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign_3.0.5_aarch64.apk",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign_3.0.5_aarch64.apk.sigstore.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign_3.0.5_amd64.deb",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign_3.0.5_amd64.deb.sigstore.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign_3.0.5_arm64.deb",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign_3.0.5_arm64.deb.sigstore.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign_3.0.5_armhf.deb",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign_3.0.5_armhf.deb.sigstore.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign_3.0.5_armv7.apk",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign_3.0.5_armv7.apk.sigstore.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign_3.0.5_ppc64el.deb",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign_3.0.5_ppc64el.deb.sigstore.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign_3.0.5_ppc64le.apk",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign_3.0.5_ppc64le.apk.sigstore.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign_3.0.5_riscv64.apk",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign_3.0.5_riscv64.apk.sigstore.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign_3.0.5_riscv64.deb",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign_3.0.5_riscv64.deb.sigstore.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign_3.0.5_s390x.apk",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign_3.0.5_s390x.apk.sigstore.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign_3.0.5_s390x.deb",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign_3.0.5_s390x.deb.sigstore.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign_3.0.5_x86_64.apk",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign_3.0.5_x86_64.apk.sigstore.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign_checksums.txt",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign_checksums.txt.sigstore.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/release-cosign.pub"
]
},
"v3.0.5": {
"id": 288413621,
"tag_name": "v3.0.5",
"html_url": "https://github.com/sigstore/cosign/releases/tag/v3.0.5",
"assets": [
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign-3.0.5-1.aarch64.rpm",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign-3.0.5-1.aarch64.rpm.sigstore.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign-3.0.5-1.armv7hl.rpm",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign-3.0.5-1.armv7hl.rpm.sigstore.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign-3.0.5-1.ppc64le.rpm",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign-3.0.5-1.ppc64le.rpm.sigstore.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign-3.0.5-1.riscv64.rpm",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign-3.0.5-1.riscv64.rpm.sigstore.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign-3.0.5-1.s390x.rpm",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign-3.0.5-1.s390x.rpm.sigstore.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign-3.0.5-1.x86_64.rpm",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign-3.0.5-1.x86_64.rpm.sigstore.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign-darwin-amd64",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign-darwin-amd64-kms.sigstore.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign-darwin-amd64.sigstore.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign-darwin-amd64_3.0.5_darwin_amd64.sbom.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign-darwin-arm64",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign-darwin-arm64-kms.sigstore.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign-darwin-arm64.sigstore.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign-darwin-arm64_3.0.5_darwin_arm64.sbom.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign-linux-amd64",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign-linux-amd64-kms.sigstore.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign-linux-amd64.sigstore.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign-linux-amd64_3.0.5_linux_amd64.sbom.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign-linux-arm",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign-linux-arm-kms.sigstore.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign-linux-arm.sigstore.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign-linux-arm64",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign-linux-arm64-kms.sigstore.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign-linux-arm64.sigstore.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign-linux-arm64_3.0.5_linux_arm64.sbom.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign-linux-arm_3.0.5_linux_arm.sbom.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign-linux-pivkey-pkcs11key-amd64",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign-linux-pivkey-pkcs11key-amd64-kms.sigstore.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign-linux-pivkey-pkcs11key-amd64.sigstore.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign-linux-pivkey-pkcs11key-amd64_3.0.5_linux_amd64.sbom.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign-linux-pivkey-pkcs11key-arm64",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign-linux-pivkey-pkcs11key-arm64-kms.sigstore.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign-linux-pivkey-pkcs11key-arm64.sigstore.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign-linux-pivkey-pkcs11key-arm64_3.0.5_linux_arm64.sbom.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign-linux-ppc64le",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign-linux-ppc64le-kms.sigstore.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign-linux-ppc64le.sigstore.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign-linux-ppc64le_3.0.5_linux_ppc64le.sbom.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign-linux-riscv64",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign-linux-riscv64-kms.sigstore.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign-linux-riscv64.sigstore.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign-linux-riscv64_3.0.5_linux_riscv64.sbom.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign-linux-s390x",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign-linux-s390x-kms.sigstore.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign-linux-s390x.sigstore.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign-linux-s390x_3.0.5_linux_s390x.sbom.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign-windows-amd64.exe",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign-windows-amd64.exe-kms.sigstore.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign-windows-amd64.exe.sigstore.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign-windows-amd64.exe_3.0.5_windows_amd64.sbom.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign_3.0.5_aarch64.apk",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign_3.0.5_aarch64.apk.sigstore.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign_3.0.5_amd64.deb",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign_3.0.5_amd64.deb.sigstore.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign_3.0.5_arm64.deb",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign_3.0.5_arm64.deb.sigstore.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign_3.0.5_armhf.deb",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign_3.0.5_armhf.deb.sigstore.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign_3.0.5_armv7.apk",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign_3.0.5_armv7.apk.sigstore.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign_3.0.5_ppc64el.deb",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign_3.0.5_ppc64el.deb.sigstore.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign_3.0.5_ppc64le.apk",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign_3.0.5_ppc64le.apk.sigstore.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign_3.0.5_riscv64.apk",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign_3.0.5_riscv64.apk.sigstore.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign_3.0.5_riscv64.deb",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign_3.0.5_riscv64.deb.sigstore.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign_3.0.5_s390x.apk",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign_3.0.5_s390x.apk.sigstore.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign_3.0.5_s390x.deb",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign_3.0.5_s390x.deb.sigstore.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign_3.0.5_x86_64.apk",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign_3.0.5_x86_64.apk.sigstore.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign_checksums.txt",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign_checksums.txt.sigstore.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/release-cosign.pub"
]
},
"v3.0.4": {
@@ -3406,93 +3496,93 @@
]
},
"edge": {
"id": 275625037,
"tag_name": "v3.0.4",
"html_url": "https://github.com/sigstore/cosign/releases/tag/v3.0.4",
"id": 288413621,
"tag_name": "v3.0.5",
"html_url": "https://github.com/sigstore/cosign/releases/tag/v3.0.5",
"assets": [
"https://github.com/sigstore/cosign/releases/download/v3.0.4/cosign-3.0.4-1.aarch64.rpm",
"https://github.com/sigstore/cosign/releases/download/v3.0.4/cosign-3.0.4-1.aarch64.rpm.sigstore.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.4/cosign-3.0.4-1.armv7hl.rpm",
"https://github.com/sigstore/cosign/releases/download/v3.0.4/cosign-3.0.4-1.armv7hl.rpm.sigstore.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.4/cosign-3.0.4-1.ppc64le.rpm",
"https://github.com/sigstore/cosign/releases/download/v3.0.4/cosign-3.0.4-1.ppc64le.rpm.sigstore.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.4/cosign-3.0.4-1.riscv64.rpm",
"https://github.com/sigstore/cosign/releases/download/v3.0.4/cosign-3.0.4-1.riscv64.rpm.sigstore.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.4/cosign-3.0.4-1.s390x.rpm",
"https://github.com/sigstore/cosign/releases/download/v3.0.4/cosign-3.0.4-1.s390x.rpm.sigstore.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.4/cosign-3.0.4-1.x86_64.rpm",
"https://github.com/sigstore/cosign/releases/download/v3.0.4/cosign-3.0.4-1.x86_64.rpm.sigstore.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.4/cosign-darwin-amd64",
"https://github.com/sigstore/cosign/releases/download/v3.0.4/cosign-darwin-amd64-kms.sigstore.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.4/cosign-darwin-amd64.sigstore.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.4/cosign-darwin-amd64_3.0.4_darwin_amd64.sbom.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.4/cosign-darwin-arm64",
"https://github.com/sigstore/cosign/releases/download/v3.0.4/cosign-darwin-arm64-kms.sigstore.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.4/cosign-darwin-arm64.sigstore.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.4/cosign-darwin-arm64_3.0.4_darwin_arm64.sbom.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.4/cosign-linux-amd64",
"https://github.com/sigstore/cosign/releases/download/v3.0.4/cosign-linux-amd64-kms.sigstore.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.4/cosign-linux-amd64.sigstore.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.4/cosign-linux-amd64_3.0.4_linux_amd64.sbom.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.4/cosign-linux-arm",
"https://github.com/sigstore/cosign/releases/download/v3.0.4/cosign-linux-arm-kms.sigstore.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.4/cosign-linux-arm.sigstore.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.4/cosign-linux-arm64",
"https://github.com/sigstore/cosign/releases/download/v3.0.4/cosign-linux-arm64-kms.sigstore.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.4/cosign-linux-arm64.sigstore.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.4/cosign-linux-arm64_3.0.4_linux_arm64.sbom.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.4/cosign-linux-arm_3.0.4_linux_arm.sbom.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.4/cosign-linux-pivkey-pkcs11key-amd64",
"https://github.com/sigstore/cosign/releases/download/v3.0.4/cosign-linux-pivkey-pkcs11key-amd64-kms.sigstore.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.4/cosign-linux-pivkey-pkcs11key-amd64.sigstore.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.4/cosign-linux-pivkey-pkcs11key-amd64_3.0.4_linux_amd64.sbom.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.4/cosign-linux-pivkey-pkcs11key-arm64",
"https://github.com/sigstore/cosign/releases/download/v3.0.4/cosign-linux-pivkey-pkcs11key-arm64-kms.sigstore.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.4/cosign-linux-pivkey-pkcs11key-arm64.sigstore.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.4/cosign-linux-pivkey-pkcs11key-arm64_3.0.4_linux_arm64.sbom.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.4/cosign-linux-ppc64le",
"https://github.com/sigstore/cosign/releases/download/v3.0.4/cosign-linux-ppc64le-kms.sigstore.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.4/cosign-linux-ppc64le.sigstore.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.4/cosign-linux-ppc64le_3.0.4_linux_ppc64le.sbom.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.4/cosign-linux-riscv64",
"https://github.com/sigstore/cosign/releases/download/v3.0.4/cosign-linux-riscv64-kms.sigstore.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.4/cosign-linux-riscv64.sigstore.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.4/cosign-linux-riscv64_3.0.4_linux_riscv64.sbom.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.4/cosign-linux-s390x",
"https://github.com/sigstore/cosign/releases/download/v3.0.4/cosign-linux-s390x-kms.sigstore.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.4/cosign-linux-s390x.sigstore.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.4/cosign-linux-s390x_3.0.4_linux_s390x.sbom.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.4/cosign-windows-amd64.exe",
"https://github.com/sigstore/cosign/releases/download/v3.0.4/cosign-windows-amd64.exe-kms.sigstore.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.4/cosign-windows-amd64.exe.sigstore.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.4/cosign-windows-amd64.exe_3.0.4_windows_amd64.sbom.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.4/cosign_3.0.4_aarch64.apk",
"https://github.com/sigstore/cosign/releases/download/v3.0.4/cosign_3.0.4_aarch64.apk.sigstore.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.4/cosign_3.0.4_amd64.deb",
"https://github.com/sigstore/cosign/releases/download/v3.0.4/cosign_3.0.4_amd64.deb.sigstore.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.4/cosign_3.0.4_arm64.deb",
"https://github.com/sigstore/cosign/releases/download/v3.0.4/cosign_3.0.4_arm64.deb.sigstore.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.4/cosign_3.0.4_armhf.deb",
"https://github.com/sigstore/cosign/releases/download/v3.0.4/cosign_3.0.4_armhf.deb.sigstore.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.4/cosign_3.0.4_armv7.apk",
"https://github.com/sigstore/cosign/releases/download/v3.0.4/cosign_3.0.4_armv7.apk.sigstore.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.4/cosign_3.0.4_ppc64el.deb",
"https://github.com/sigstore/cosign/releases/download/v3.0.4/cosign_3.0.4_ppc64el.deb.sigstore.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.4/cosign_3.0.4_ppc64le.apk",
"https://github.com/sigstore/cosign/releases/download/v3.0.4/cosign_3.0.4_ppc64le.apk.sigstore.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.4/cosign_3.0.4_riscv64.apk",
"https://github.com/sigstore/cosign/releases/download/v3.0.4/cosign_3.0.4_riscv64.apk.sigstore.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.4/cosign_3.0.4_riscv64.deb",
"https://github.com/sigstore/cosign/releases/download/v3.0.4/cosign_3.0.4_riscv64.deb.sigstore.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.4/cosign_3.0.4_s390x.apk",
"https://github.com/sigstore/cosign/releases/download/v3.0.4/cosign_3.0.4_s390x.apk.sigstore.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.4/cosign_3.0.4_s390x.deb",
"https://github.com/sigstore/cosign/releases/download/v3.0.4/cosign_3.0.4_s390x.deb.sigstore.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.4/cosign_3.0.4_x86_64.apk",
"https://github.com/sigstore/cosign/releases/download/v3.0.4/cosign_3.0.4_x86_64.apk.sigstore.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.4/cosign_checksums.txt",
"https://github.com/sigstore/cosign/releases/download/v3.0.4/cosign_checksums.txt.sigstore.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.4/release-cosign.pub"
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign-3.0.5-1.aarch64.rpm",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign-3.0.5-1.aarch64.rpm.sigstore.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign-3.0.5-1.armv7hl.rpm",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign-3.0.5-1.armv7hl.rpm.sigstore.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign-3.0.5-1.ppc64le.rpm",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign-3.0.5-1.ppc64le.rpm.sigstore.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign-3.0.5-1.riscv64.rpm",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign-3.0.5-1.riscv64.rpm.sigstore.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign-3.0.5-1.s390x.rpm",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign-3.0.5-1.s390x.rpm.sigstore.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign-3.0.5-1.x86_64.rpm",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign-3.0.5-1.x86_64.rpm.sigstore.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign-darwin-amd64",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign-darwin-amd64-kms.sigstore.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign-darwin-amd64.sigstore.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign-darwin-amd64_3.0.5_darwin_amd64.sbom.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign-darwin-arm64",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign-darwin-arm64-kms.sigstore.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign-darwin-arm64.sigstore.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign-darwin-arm64_3.0.5_darwin_arm64.sbom.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign-linux-amd64",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign-linux-amd64-kms.sigstore.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign-linux-amd64.sigstore.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign-linux-amd64_3.0.5_linux_amd64.sbom.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign-linux-arm",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign-linux-arm-kms.sigstore.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign-linux-arm.sigstore.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign-linux-arm64",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign-linux-arm64-kms.sigstore.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign-linux-arm64.sigstore.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign-linux-arm64_3.0.5_linux_arm64.sbom.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign-linux-arm_3.0.5_linux_arm.sbom.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign-linux-pivkey-pkcs11key-amd64",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign-linux-pivkey-pkcs11key-amd64-kms.sigstore.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign-linux-pivkey-pkcs11key-amd64.sigstore.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign-linux-pivkey-pkcs11key-amd64_3.0.5_linux_amd64.sbom.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign-linux-pivkey-pkcs11key-arm64",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign-linux-pivkey-pkcs11key-arm64-kms.sigstore.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign-linux-pivkey-pkcs11key-arm64.sigstore.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign-linux-pivkey-pkcs11key-arm64_3.0.5_linux_arm64.sbom.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign-linux-ppc64le",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign-linux-ppc64le-kms.sigstore.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign-linux-ppc64le.sigstore.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign-linux-ppc64le_3.0.5_linux_ppc64le.sbom.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign-linux-riscv64",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign-linux-riscv64-kms.sigstore.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign-linux-riscv64.sigstore.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign-linux-riscv64_3.0.5_linux_riscv64.sbom.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign-linux-s390x",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign-linux-s390x-kms.sigstore.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign-linux-s390x.sigstore.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign-linux-s390x_3.0.5_linux_s390x.sbom.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign-windows-amd64.exe",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign-windows-amd64.exe-kms.sigstore.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign-windows-amd64.exe.sigstore.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign-windows-amd64.exe_3.0.5_windows_amd64.sbom.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign_3.0.5_aarch64.apk",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign_3.0.5_aarch64.apk.sigstore.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign_3.0.5_amd64.deb",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign_3.0.5_amd64.deb.sigstore.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign_3.0.5_arm64.deb",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign_3.0.5_arm64.deb.sigstore.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign_3.0.5_armhf.deb",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign_3.0.5_armhf.deb.sigstore.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign_3.0.5_armv7.apk",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign_3.0.5_armv7.apk.sigstore.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign_3.0.5_ppc64el.deb",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign_3.0.5_ppc64el.deb.sigstore.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign_3.0.5_ppc64le.apk",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign_3.0.5_ppc64le.apk.sigstore.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign_3.0.5_riscv64.apk",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign_3.0.5_riscv64.apk.sigstore.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign_3.0.5_riscv64.deb",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign_3.0.5_riscv64.deb.sigstore.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign_3.0.5_s390x.apk",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign_3.0.5_s390x.apk.sigstore.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign_3.0.5_s390x.deb",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign_3.0.5_s390x.deb.sigstore.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign_3.0.5_x86_64.apk",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign_3.0.5_x86_64.apk.sigstore.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign_checksums.txt",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/cosign_checksums.txt.sigstore.json",
"https://github.com/sigstore/cosign/releases/download/v3.0.5/release-cosign.pub"
]
},
"v2.0.0-rc.3": {

View File

@@ -16,10 +16,6 @@ updates:
versioning-strategy: "increase"
allow:
- dependency-type: "production"
ignore:
- # we want to match the same version as the one used by @actions/artifact
# https://github.com/actions/toolkit/blob/ae38557bb0dba824cdda26ce787bd6b66cf07a83/packages/artifact/package.json#L46
dependency-name: "@azure/storage-blob"
labels:
- "dependencies"
- "bot"

View File

@@ -1,17 +1,35 @@
{
"latest": {
"id": 280041206,
"tag_name": "docker-v29.2.0",
"html_url": "https://github.com/moby/moby/releases/tag/docker-v29.2.0",
"id": 293527283,
"tag_name": "docker-v29.3.0",
"html_url": "https://github.com/moby/moby/releases/tag/docker-v29.3.0",
"assets": []
},
"v29.2.0": {
"id": 280041206,
"tag_name": "docker-v29.2.0",
"html_url": "https://github.com/moby/moby/releases/tag/docker-v29.2.0",
"v29.3.0": {
"id": 293527283,
"tag_name": "docker-v29.3.0",
"html_url": "https://github.com/moby/moby/releases/tag/docker-v29.3.0",
"assets": []
},
"edge": {
"id": 293527283,
"tag_name": "docker-v29.3.0",
"html_url": "https://github.com/moby/moby/releases/tag/docker-v29.3.0",
"assets": []
},
"v29.3.0-rc.1": {
"id": 291481223,
"tag_name": "docker-v29.3.0-rc.1",
"html_url": "https://github.com/moby/moby/releases/tag/docker-v29.3.0-rc.1",
"assets": []
},
"v29.2.1": {
"id": 282275652,
"tag_name": "docker-v29.2.1",
"html_url": "https://github.com/moby/moby/releases/tag/docker-v29.2.1",
"assets": []
},
"v29.2.0": {
"id": 280041206,
"tag_name": "docker-v29.2.0",
"html_url": "https://github.com/moby/moby/releases/tag/docker-v29.2.0",

View File

@@ -1,37 +1,72 @@
{
"latest": {
"id": 268115419,
"tag_name": "v0.11.1",
"html_url": "https://github.com/regclient/regclient/releases/tag/v0.11.1",
"id": 289583033,
"tag_name": "v0.11.2",
"html_url": "https://github.com/regclient/regclient/releases/tag/v0.11.2",
"assets": [
"https://github.com/regclient/regclient/releases/download/v0.11.1/metadata.tgz",
"https://github.com/regclient/regclient/releases/download/v0.11.1/regbot-darwin-amd64",
"https://github.com/regclient/regclient/releases/download/v0.11.1/regbot-darwin-arm64",
"https://github.com/regclient/regclient/releases/download/v0.11.1/regbot-freebsd-amd64",
"https://github.com/regclient/regclient/releases/download/v0.11.1/regbot-linux-amd64",
"https://github.com/regclient/regclient/releases/download/v0.11.1/regbot-linux-arm64",
"https://github.com/regclient/regclient/releases/download/v0.11.1/regbot-linux-ppc64le",
"https://github.com/regclient/regclient/releases/download/v0.11.1/regbot-linux-riscv64",
"https://github.com/regclient/regclient/releases/download/v0.11.1/regbot-linux-s390x",
"https://github.com/regclient/regclient/releases/download/v0.11.1/regbot-windows-amd64.exe",
"https://github.com/regclient/regclient/releases/download/v0.11.1/regctl-darwin-amd64",
"https://github.com/regclient/regclient/releases/download/v0.11.1/regctl-darwin-arm64",
"https://github.com/regclient/regclient/releases/download/v0.11.1/regctl-freebsd-amd64",
"https://github.com/regclient/regclient/releases/download/v0.11.1/regctl-linux-amd64",
"https://github.com/regclient/regclient/releases/download/v0.11.1/regctl-linux-arm64",
"https://github.com/regclient/regclient/releases/download/v0.11.1/regctl-linux-ppc64le",
"https://github.com/regclient/regclient/releases/download/v0.11.1/regctl-linux-riscv64",
"https://github.com/regclient/regclient/releases/download/v0.11.1/regctl-linux-s390x",
"https://github.com/regclient/regclient/releases/download/v0.11.1/regctl-windows-amd64.exe",
"https://github.com/regclient/regclient/releases/download/v0.11.1/regsync-darwin-amd64",
"https://github.com/regclient/regclient/releases/download/v0.11.1/regsync-darwin-arm64",
"https://github.com/regclient/regclient/releases/download/v0.11.1/regsync-freebsd-amd64",
"https://github.com/regclient/regclient/releases/download/v0.11.1/regsync-linux-amd64",
"https://github.com/regclient/regclient/releases/download/v0.11.1/regsync-linux-arm64",
"https://github.com/regclient/regclient/releases/download/v0.11.1/regsync-linux-ppc64le",
"https://github.com/regclient/regclient/releases/download/v0.11.1/regsync-linux-riscv64",
"https://github.com/regclient/regclient/releases/download/v0.11.1/regsync-linux-s390x",
"https://github.com/regclient/regclient/releases/download/v0.11.1/regsync-windows-amd64.exe"
"https://github.com/regclient/regclient/releases/download/v0.11.2/metadata.tgz",
"https://github.com/regclient/regclient/releases/download/v0.11.2/regbot-darwin-amd64",
"https://github.com/regclient/regclient/releases/download/v0.11.2/regbot-darwin-arm64",
"https://github.com/regclient/regclient/releases/download/v0.11.2/regbot-freebsd-amd64",
"https://github.com/regclient/regclient/releases/download/v0.11.2/regbot-linux-amd64",
"https://github.com/regclient/regclient/releases/download/v0.11.2/regbot-linux-arm64",
"https://github.com/regclient/regclient/releases/download/v0.11.2/regbot-linux-ppc64le",
"https://github.com/regclient/regclient/releases/download/v0.11.2/regbot-linux-riscv64",
"https://github.com/regclient/regclient/releases/download/v0.11.2/regbot-linux-s390x",
"https://github.com/regclient/regclient/releases/download/v0.11.2/regbot-windows-amd64.exe",
"https://github.com/regclient/regclient/releases/download/v0.11.2/regctl-darwin-amd64",
"https://github.com/regclient/regclient/releases/download/v0.11.2/regctl-darwin-arm64",
"https://github.com/regclient/regclient/releases/download/v0.11.2/regctl-freebsd-amd64",
"https://github.com/regclient/regclient/releases/download/v0.11.2/regctl-linux-amd64",
"https://github.com/regclient/regclient/releases/download/v0.11.2/regctl-linux-arm64",
"https://github.com/regclient/regclient/releases/download/v0.11.2/regctl-linux-ppc64le",
"https://github.com/regclient/regclient/releases/download/v0.11.2/regctl-linux-riscv64",
"https://github.com/regclient/regclient/releases/download/v0.11.2/regctl-linux-s390x",
"https://github.com/regclient/regclient/releases/download/v0.11.2/regctl-windows-amd64.exe",
"https://github.com/regclient/regclient/releases/download/v0.11.2/regsync-darwin-amd64",
"https://github.com/regclient/regclient/releases/download/v0.11.2/regsync-darwin-arm64",
"https://github.com/regclient/regclient/releases/download/v0.11.2/regsync-freebsd-amd64",
"https://github.com/regclient/regclient/releases/download/v0.11.2/regsync-linux-amd64",
"https://github.com/regclient/regclient/releases/download/v0.11.2/regsync-linux-arm64",
"https://github.com/regclient/regclient/releases/download/v0.11.2/regsync-linux-ppc64le",
"https://github.com/regclient/regclient/releases/download/v0.11.2/regsync-linux-riscv64",
"https://github.com/regclient/regclient/releases/download/v0.11.2/regsync-linux-s390x",
"https://github.com/regclient/regclient/releases/download/v0.11.2/regsync-windows-amd64.exe"
]
},
"v0.11.2": {
"id": 289583033,
"tag_name": "v0.11.2",
"html_url": "https://github.com/regclient/regclient/releases/tag/v0.11.2",
"assets": [
"https://github.com/regclient/regclient/releases/download/v0.11.2/metadata.tgz",
"https://github.com/regclient/regclient/releases/download/v0.11.2/regbot-darwin-amd64",
"https://github.com/regclient/regclient/releases/download/v0.11.2/regbot-darwin-arm64",
"https://github.com/regclient/regclient/releases/download/v0.11.2/regbot-freebsd-amd64",
"https://github.com/regclient/regclient/releases/download/v0.11.2/regbot-linux-amd64",
"https://github.com/regclient/regclient/releases/download/v0.11.2/regbot-linux-arm64",
"https://github.com/regclient/regclient/releases/download/v0.11.2/regbot-linux-ppc64le",
"https://github.com/regclient/regclient/releases/download/v0.11.2/regbot-linux-riscv64",
"https://github.com/regclient/regclient/releases/download/v0.11.2/regbot-linux-s390x",
"https://github.com/regclient/regclient/releases/download/v0.11.2/regbot-windows-amd64.exe",
"https://github.com/regclient/regclient/releases/download/v0.11.2/regctl-darwin-amd64",
"https://github.com/regclient/regclient/releases/download/v0.11.2/regctl-darwin-arm64",
"https://github.com/regclient/regclient/releases/download/v0.11.2/regctl-freebsd-amd64",
"https://github.com/regclient/regclient/releases/download/v0.11.2/regctl-linux-amd64",
"https://github.com/regclient/regclient/releases/download/v0.11.2/regctl-linux-arm64",
"https://github.com/regclient/regclient/releases/download/v0.11.2/regctl-linux-ppc64le",
"https://github.com/regclient/regclient/releases/download/v0.11.2/regctl-linux-riscv64",
"https://github.com/regclient/regclient/releases/download/v0.11.2/regctl-linux-s390x",
"https://github.com/regclient/regclient/releases/download/v0.11.2/regctl-windows-amd64.exe",
"https://github.com/regclient/regclient/releases/download/v0.11.2/regsync-darwin-amd64",
"https://github.com/regclient/regclient/releases/download/v0.11.2/regsync-darwin-arm64",
"https://github.com/regclient/regclient/releases/download/v0.11.2/regsync-freebsd-amd64",
"https://github.com/regclient/regclient/releases/download/v0.11.2/regsync-linux-amd64",
"https://github.com/regclient/regclient/releases/download/v0.11.2/regsync-linux-arm64",
"https://github.com/regclient/regclient/releases/download/v0.11.2/regsync-linux-ppc64le",
"https://github.com/regclient/regclient/releases/download/v0.11.2/regsync-linux-riscv64",
"https://github.com/regclient/regclient/releases/download/v0.11.2/regsync-linux-s390x",
"https://github.com/regclient/regclient/releases/download/v0.11.2/regsync-windows-amd64.exe"
]
},
"v0.11.1": {

View File

@@ -21,11 +21,10 @@ jobs:
node_version:
- 24
- 20
- 18
steps:
-
name: Build
uses: docker/bake-action@v6
uses: docker/bake-action@v7
with:
targets: build
env:

View File

@@ -35,7 +35,7 @@ jobs:
uses: actions/checkout@v6
-
name: Download
uses: actions/download-artifact@v7
uses: actions/download-artifact@v8
with:
name: buildx-lab-releases-json
path: .github

View File

@@ -35,7 +35,7 @@ jobs:
uses: actions/checkout@v6
-
name: Download
uses: actions/download-artifact@v7
uses: actions/download-artifact@v8
with:
name: buildx-releases-json
path: .github

View File

@@ -12,7 +12,7 @@ permissions:
security-events: write
env:
NODE_VERSION: 20
NODE_VERSION: "24"
jobs:
analyze:

View File

@@ -35,7 +35,7 @@ jobs:
uses: actions/checkout@v6
-
name: Download
uses: actions/download-artifact@v7
uses: actions/download-artifact@v8
with:
name: compose-lab-releases-json
path: .github

View File

@@ -35,7 +35,7 @@ jobs:
uses: actions/checkout@v6
-
name: Download
uses: actions/download-artifact@v7
uses: actions/download-artifact@v8
with:
name: compose-releases-json
path: .github

View File

@@ -35,7 +35,7 @@ jobs:
uses: actions/checkout@v6
-
name: Download
uses: actions/download-artifact@v7
uses: actions/download-artifact@v8
with:
name: cosign-releases-json
path: .github

View File

@@ -38,7 +38,7 @@ jobs:
uses: actions/checkout@v6
-
name: Download
uses: actions/download-artifact@v7
uses: actions/download-artifact@v8
with:
name: docker-releases-json
path: .github

View File

@@ -14,7 +14,7 @@ on:
- 'v*'
env:
NODE_VERSION: "24" # at least Node 24 is required for Trusted Publishing with OIDC
NODE_VERSION: "24"
jobs:
publish:
@@ -53,7 +53,7 @@ jobs:
npm publish --provenance --access public
-
name: Create Release
uses: softprops/action-gh-release@a06a81a03ee405af7f2048a818ed3f03bbf83c7b # v2.5.0
uses: softprops/action-gh-release@153bb8e04406b158c6c84fc1615b65b24149a1fe # v2.6.1
with:
draft: true
generate_release_notes: true

View File

@@ -35,7 +35,7 @@ jobs:
uses: actions/checkout@v6
-
name: Download
uses: actions/download-artifact@v7
uses: actions/download-artifact@v8
with:
name: regclient-releases-json
path: .github

View File

@@ -14,9 +14,9 @@ on:
- '.github/*-releases.json'
env:
NODE_VERSION: "20"
BUILDX_VERSION: "v0.31.0"
BUILDKIT_IMAGE: "moby/buildkit:v0.27.0"
NODE_VERSION: "24"
BUILDX_VERSION: "v0.32.1"
BUILDKIT_IMAGE: "moby/buildkit:v0.28.0"
jobs:
test:
@@ -30,20 +30,20 @@ jobs:
node_version:
- 24
- 20
- 18
steps:
-
name: Checkout
uses: actions/checkout@v6
-
name: Test
uses: docker/bake-action@v6
uses: docker/bake-action@v7
with:
source: .
targets: test-coverage
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
NODE_VERSION: ${{ matrix.node_version }}
DOCKER_BUILD_SUMMARY: false
-
name: Check coverage
run: |
@@ -156,7 +156,7 @@ jobs:
uses: actions/checkout@v6
-
name: Expose GitHub Runtime
uses: crazy-max/ghaction-github-runtime@v3
uses: crazy-max/ghaction-github-runtime@v4
-
# FIXME: Needs to setup node twice on Windows: https://github.com/actions/setup-node/issues/1357#issuecomment-3254613964
name: Setup Node
@@ -179,7 +179,7 @@ jobs:
-
name: Set up Docker Buildx
if: startsWith(matrix.os, 'ubuntu')
uses: docker/setup-buildx-action@v3
uses: docker/setup-buildx-action@v4
with:
version: ${{ env.BUILDX_VERSION }}
driver: docker
@@ -187,7 +187,7 @@ jobs:
name: Set up container builder
if: startsWith(matrix.os, 'ubuntu')
id: builder
uses: docker/setup-buildx-action@v3
uses: docker/setup-buildx-action@v4
with:
version: ${{ env.BUILDX_VERSION }}
driver-opts: image=${{ env.BUILDKIT_IMAGE }}
@@ -205,7 +205,7 @@ jobs:
if (testName) {
args.push(`--testNamePattern=^${testName} `);
}
args.push(`--runTestsByPath`, `__tests__/${{ matrix.test }}`, `--coverageDirectory=./coverage`);
args.push(`__tests__/${{ matrix.test }}`, `--coverage.reportsDirectory=./coverage`);
await exec.exec('yarn', args);
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

View File

@@ -35,7 +35,7 @@ jobs:
uses: actions/checkout@v6
-
name: Download
uses: actions/download-artifact@v7
uses: actions/download-artifact@v8
with:
name: undock-releases-json
path: .github

View File

@@ -17,15 +17,15 @@ jobs:
prepare:
runs-on: ubuntu-latest
outputs:
targets: ${{ steps.generate.outputs.targets }}
matrix: ${{ steps.generate.outputs.matrix }}
steps:
-
name: Checkout
uses: actions/checkout@v6
-
name: List targets
name: Generate matrix
id: generate
uses: docker/bake-action/subaction/list-targets@v6
uses: docker/bake-action/subaction/matrix@v7
with:
target: validate
@@ -36,10 +36,10 @@ jobs:
strategy:
fail-fast: false
matrix:
target: ${{ fromJson(needs.prepare.outputs.targets) }}
include: ${{ fromJson(needs.prepare.outputs.matrix) }}
steps:
-
name: Validate
uses: docker/bake-action@v6
uses: docker/bake-action@v7
with:
targets: ${{ matrix.target }}

7
.gitignore vendored
View File

@@ -38,13 +38,6 @@ jspm_packages/
# Yarn Integrity file
.yarn-integrity
# dotenv environment variable files
.env
.env.development.local
.env.test.local
.env.production.local
.env.local
# yarn v2
.yarn/cache
.yarn/unplugged

View File

@@ -6,6 +6,5 @@
"singleQuote": true,
"trailingComma": "none",
"bracketSpacing": false,
"arrowParens": "avoid",
"parser": "typescript"
"arrowParens": "avoid"
}

View File

@@ -1,224 +0,0 @@
/**
* Copyright 2023 actions-toolkit authors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import {jest} from '@jest/globals';
export const context = {
repo: {
owner: 'docker',
repo: 'actions-toolkit'
},
ref: 'refs/heads/master',
runId: 2188748038,
runNumber: 15,
payload: {
after: '860c1904a1ce19322e91ac35af1ab07466440c37',
base_ref: null,
before: '5f3331d7f7044c18ca9f12c77d961c4d7cf3276a',
commits: [
{
author: {
email: 'crazy-max@users.noreply.github.com',
name: 'CrazyMax',
username: 'crazy-max'
},
committer: {
email: 'crazy-max@users.noreply.github.com',
name: 'CrazyMax',
username: 'crazy-max'
},
distinct: true,
id: '860c1904a1ce19322e91ac35af1ab07466440c37',
message: 'hello dev',
timestamp: '2022-04-19T11:27:24+02:00',
tree_id: 'd2c60af597e863787d2d27f569e30495b0b92820',
url: 'https://github.com/docker/test-docker-action/commit/860c1904a1ce19322e91ac35af1ab07466440c37'
}
],
compare: 'https://github.com/docker/test-docker-action/compare/5f3331d7f704...860c1904a1ce',
created: false,
deleted: false,
forced: false,
head_commit: {
author: {
email: 'crazy-max@users.noreply.github.com',
name: 'CrazyMax',
username: 'crazy-max'
},
committer: {
email: 'crazy-max@users.noreply.github.com',
name: 'CrazyMax',
username: 'crazy-max'
},
distinct: true,
id: '860c1904a1ce19322e91ac35af1ab07466440c37',
message: 'hello dev',
timestamp: '2022-04-19T11:27:24+02:00',
tree_id: 'd2c60af597e863787d2d27f569e30495b0b92820',
url: 'https://github.com/docker/test-docker-action/commit/860c1904a1ce19322e91ac35af1ab07466440c37'
},
organization: {
avatar_url: 'https://avatars.githubusercontent.com/u/5429470?v=4',
description: 'Docker helps developers bring their ideas to life by conquering the complexity of app development.',
events_url: 'https://api.github.com/orgs/docker/events',
hooks_url: 'https://api.github.com/orgs/docker/hooks',
id: 5429470,
issues_url: 'https://api.github.com/orgs/docker/issues',
login: 'docker',
members_url: 'https://api.github.com/orgs/docker/members{/member}',
node_id: 'MDEyOk9yZ2FuaXphdGlvbjU0Mjk0NzA=',
public_members_url: 'https://api.github.com/orgs/docker/public_members{/member}',
repos_url: 'https://api.github.com/orgs/docker/repos',
url: 'https://api.github.com/orgs/docker'
},
pusher: {
email: 'github@crazymax.dev',
name: 'crazy-max'
},
ref: 'refs/heads/dev',
repository: {
allow_forking: true,
archive_url: 'https://api.github.com/repos/docker/test-docker-action/{archive_format}{/ref}',
archived: false,
assignees_url: 'https://api.github.com/repos/docker/test-docker-action/assignees{/user}',
blobs_url: 'https://api.github.com/repos/docker/test-docker-action/git/blobs{/sha}',
branches_url: 'https://api.github.com/repos/docker/test-docker-action/branches{/branch}',
clone_url: 'https://github.com/docker/test-docker-action.git',
collaborators_url: 'https://api.github.com/repos/docker/test-docker-action/collaborators{/collaborator}',
comments_url: 'https://api.github.com/repos/docker/test-docker-action/comments{/number}',
commits_url: 'https://api.github.com/repos/docker/test-docker-action/commits{/sha}',
compare_url: 'https://api.github.com/repos/docker/test-docker-action/compare/{base}...{head}',
contents_url: 'https://api.github.com/repos/docker/test-docker-action/contents/{+path}',
contributors_url: 'https://api.github.com/repos/docker/test-docker-action/contributors',
created_at: 1596792180,
default_branch: 'master',
deployments_url: 'https://api.github.com/repos/docker/test-docker-action/deployments',
description: 'Test "Docker" Actions',
disabled: false,
downloads_url: 'https://api.github.com/repos/docker/test-docker-action/downloads',
events_url: 'https://api.github.com/repos/docker/test-docker-action/events',
fork: false,
forks: 1,
forks_count: 1,
forks_url: 'https://api.github.com/repos/docker/test-docker-action/forks',
full_name: 'docker/test-docker-action',
git_commits_url: 'https://api.github.com/repos/docker/test-docker-action/git/commits{/sha}',
git_refs_url: 'https://api.github.com/repos/docker/test-docker-action/git/refs{/sha}',
git_tags_url: 'https://api.github.com/repos/docker/test-docker-action/git/tags{/sha}',
git_url: 'git://github.com/docker/test-docker-action.git',
has_downloads: true,
has_issues: true,
has_pages: false,
has_projects: true,
has_wiki: true,
homepage: '',
hooks_url: 'https://api.github.com/repos/docker/test-docker-action/hooks',
html_url: 'https://github.com/docker/test-docker-action',
id: 285789493,
is_template: false,
issue_comment_url: 'https://api.github.com/repos/docker/test-docker-action/issues/comments{/number}',
issue_events_url: 'https://api.github.com/repos/docker/test-docker-action/issues/events{/number}',
issues_url: 'https://api.github.com/repos/docker/test-docker-action/issues{/number}',
keys_url: 'https://api.github.com/repos/docker/test-docker-action/keys{/key_id}',
labels_url: 'https://api.github.com/repos/docker/test-docker-action/labels{/name}',
language: 'JavaScript',
languages_url: 'https://api.github.com/repos/docker/test-docker-action/languages',
license: {
key: 'mit',
name: 'MIT License',
node_id: 'MDc6TGljZW5zZTEz',
spdx_id: 'MIT',
url: 'https://api.github.com/licenses/mit'
},
master_branch: 'master',
merges_url: 'https://api.github.com/repos/docker/test-docker-action/merges',
milestones_url: 'https://api.github.com/repos/docker/test-docker-action/milestones{/number}',
mirror_url: null,
name: 'test-docker-action',
node_id: 'MDEwOlJlcG9zaXRvcnkyODU3ODk0OTM=',
notifications_url: 'https://api.github.com/repos/docker/test-docker-action/notifications{?since,all,participating}',
open_issues: 6,
open_issues_count: 6,
organization: 'docker',
owner: {
avatar_url: 'https://avatars.githubusercontent.com/u/5429470?v=4',
email: 'info@docker.com',
events_url: 'https://api.github.com/users/docker/events{/privacy}',
followers_url: 'https://api.github.com/users/docker/followers',
following_url: 'https://api.github.com/users/docker/following{/other_user}',
gists_url: 'https://api.github.com/users/docker/gists{/gist_id}',
gravatar_id: '',
html_url: 'https://github.com/docker',
id: 5429470,
login: 'docker',
name: 'docker',
node_id: 'MDEyOk9yZ2FuaXphdGlvbjU0Mjk0NzA=',
organizations_url: 'https://api.github.com/users/docker/orgs',
received_events_url: 'https://api.github.com/users/docker/received_events',
repos_url: 'https://api.github.com/users/docker/repos',
site_admin: false,
starred_url: 'https://api.github.com/users/docker/starred{/owner}{/repo}',
subscriptions_url: 'https://api.github.com/users/docker/subscriptions',
type: 'Organization',
url: 'https://api.github.com/users/docker'
},
private: true,
pulls_url: 'https://api.github.com/repos/docker/test-docker-action/pulls{/number}',
pushed_at: 1650360446,
releases_url: 'https://api.github.com/repos/docker/test-docker-action/releases{/id}',
size: 796,
ssh_url: 'git@github.com:docker/test-docker-action.git',
stargazers: 0,
stargazers_count: 0,
stargazers_url: 'https://api.github.com/repos/docker/test-docker-action/stargazers',
statuses_url: 'https://api.github.com/repos/docker/test-docker-action/statuses/{sha}',
subscribers_url: 'https://api.github.com/repos/docker/test-docker-action/subscribers',
subscription_url: 'https://api.github.com/repos/docker/test-docker-action/subscription',
svn_url: 'https://github.com/docker/test-docker-action',
tags_url: 'https://api.github.com/repos/docker/test-docker-action/tags',
teams_url: 'https://api.github.com/repos/docker/test-docker-action/teams',
topics: [],
trees_url: 'https://api.github.com/repos/docker/test-docker-action/git/trees{/sha}',
updated_at: '2022-04-19T09:05:09Z',
url: 'https://github.com/docker/test-docker-action',
visibility: 'private',
watchers: 0,
watchers_count: 0
},
sender: {
avatar_url: 'https://avatars.githubusercontent.com/u/1951866?v=4',
events_url: 'https://api.github.com/users/crazy-max/events{/privacy}',
followers_url: 'https://api.github.com/users/crazy-max/followers',
following_url: 'https://api.github.com/users/crazy-max/following{/other_user}',
gists_url: 'https://api.github.com/users/crazy-max/gists{/gist_id}',
gravatar_id: '',
html_url: 'https://github.com/crazy-max',
id: 1951866,
login: 'crazy-max',
node_id: 'MDQ6VXNlcjE5NTE4NjY=',
organizations_url: 'https://api.github.com/users/crazy-max/orgs',
received_events_url: 'https://api.github.com/users/crazy-max/received_events',
repos_url: 'https://api.github.com/users/crazy-max/repos',
site_admin: false,
starred_url: 'https://api.github.com/users/crazy-max/starred{/owner}{/repo}',
subscriptions_url: 'https://api.github.com/users/crazy-max/subscriptions',
type: 'User',
url: 'https://api.github.com/users/crazy-max'
}
}
};
export const getOctokit = jest.fn();

View File

@@ -1,5 +1,5 @@
/**
* Copyright 2023 actions-toolkit authors
* Copyright 2025 actions-toolkit authors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -14,18 +14,17 @@
* limitations under the License.
*/
module.exports = {
testEnvironment: 'node',
moduleFileExtensions: ['js', 'ts'],
setupFiles: ['dotenv/config'],
testMatch: ['**/*.test.itg.ts'],
testTimeout: 1800000, // 30 minutes
transform: {
'^.+\\.ts$': 'ts-jest'
},
moduleNameMapper: {
'^csv-parse/sync': '<rootDir>/node_modules/csv-parse/dist/cjs/sync.cjs'
},
testResultsProcessor: '<rootDir>/__tests__/testResultsProcessor.js',
verbose: false
import {vi} from 'vitest';
import os from 'os';
export const mockPlatform = (platform: NodeJS.Platform) => {
return vi.spyOn(os, 'platform').mockImplementation(() => platform);
};
export const mockArch = (arch: string) => {
return vi.spyOn(os, 'arch').mockImplementation(() => arch);
};
export const mockHomedir = (dir: string) => {
return vi.spyOn(os, 'homedir').mockImplementation(() => dir);
};

View File

@@ -0,0 +1,38 @@
/**
* Copyright 2026 actions-toolkit authors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import fs from 'node:fs';
import path from 'node:path';
const testsRoot = path.resolve('__tests__');
const results = [];
const walk = dir => {
for (const entry of fs.readdirSync(dir, {withFileTypes: true})) {
const fullPath = path.join(dir, entry.name);
if (entry.isDirectory()) {
walk(fullPath);
continue;
}
if (entry.isFile() && entry.name.endsWith('.test.itg.ts')) {
results.push(fullPath.replaceAll(path.sep, '/'));
}
}
};
walk(testsRoot);
results.sort((a, b) => a.localeCompare(b));
process.stdout.write(`${results.join('\n')}\n`);

View File

@@ -0,0 +1,242 @@
/**
* Copyright 2026 actions-toolkit authors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import fs from 'node:fs';
import os from 'node:os';
import path from 'node:path';
import {vi} from 'vitest';
const envTmpDir = process.env.DOCKER_ACTIONS_TOOLKIT_TMPDIR;
const tmpDir = envTmpDir || fs.mkdtempSync(path.join(os.tmpdir(), 'docker-actions-toolkit-'));
process.env = Object.assign({}, process.env, {
DOCKER_ACTIONS_TOOLKIT_TMPDIR: tmpDir,
TEMP: tmpDir,
GITHUB_REPOSITORY: 'docker/actions-toolkit',
GITHUB_RUN_ATTEMPT: '2',
GITHUB_RUN_ID: '2188748038',
GITHUB_RUN_NUMBER: '15',
RUNNER_TEMP: path.join(tmpDir, 'runner-temp'),
RUNNER_TOOL_CACHE: path.join(tmpDir, 'runner-tool-cache')
});
vi.mock('@actions/github', () => ({
context: {
repo: {
owner: 'docker',
repo: 'actions-toolkit'
},
ref: 'refs/heads/master',
runId: 2188748038,
runNumber: 15,
payload: {
after: '860c1904a1ce19322e91ac35af1ab07466440c37',
base_ref: null,
before: '5f3331d7f7044c18ca9f12c77d961c4d7cf3276a',
commits: [
{
author: {
email: 'crazy-max@users.noreply.github.com',
name: 'CrazyMax',
username: 'crazy-max'
},
committer: {
email: 'crazy-max@users.noreply.github.com',
name: 'CrazyMax',
username: 'crazy-max'
},
distinct: true,
id: '860c1904a1ce19322e91ac35af1ab07466440c37',
message: 'hello dev',
timestamp: '2022-04-19T11:27:24+02:00',
tree_id: 'd2c60af597e863787d2d27f569e30495b0b92820',
url: 'https://github.com/docker/test-docker-action/commit/860c1904a1ce19322e91ac35af1ab07466440c37'
}
],
compare: 'https://github.com/docker/test-docker-action/compare/5f3331d7f704...860c1904a1ce',
created: false,
deleted: false,
forced: false,
head_commit: {
author: {
email: 'crazy-max@users.noreply.github.com',
name: 'CrazyMax',
username: 'crazy-max'
},
committer: {
email: 'crazy-max@users.noreply.github.com',
name: 'CrazyMax',
username: 'crazy-max'
},
distinct: true,
id: '860c1904a1ce19322e91ac35af1ab07466440c37',
message: 'hello dev',
timestamp: '2022-04-19T11:27:24+02:00',
tree_id: 'd2c60af597e863787d2d27f569e30495b0b92820',
url: 'https://github.com/docker/test-docker-action/commit/860c1904a1ce19322e91ac35af1ab07466440c37'
},
organization: {
avatar_url: 'https://avatars.githubusercontent.com/u/5429470?v=4',
description: 'Docker helps developers bring their ideas to life by conquering the complexity of app development.',
events_url: 'https://api.github.com/orgs/docker/events',
hooks_url: 'https://api.github.com/orgs/docker/hooks',
id: 5429470,
issues_url: 'https://api.github.com/orgs/docker/issues',
login: 'docker',
members_url: 'https://api.github.com/orgs/docker/members{/member}',
node_id: 'MDEyOk9yZ2FuaXphdGlvbjU0Mjk0NzA=',
public_members_url: 'https://api.github.com/orgs/docker/public_members{/member}',
repos_url: 'https://api.github.com/orgs/docker/repos',
url: 'https://api.github.com/orgs/docker'
},
pusher: {
email: 'github@crazymax.dev',
name: 'crazy-max'
},
ref: 'refs/heads/dev',
repository: {
allow_forking: true,
archive_url: 'https://api.github.com/repos/docker/test-docker-action/{archive_format}{/ref}',
archived: false,
assignees_url: 'https://api.github.com/repos/docker/test-docker-action/assignees{/user}',
blobs_url: 'https://api.github.com/repos/docker/test-docker-action/git/blobs{/sha}',
branches_url: 'https://api.github.com/repos/docker/test-docker-action/branches{/branch}',
clone_url: 'https://github.com/docker/test-docker-action.git',
collaborators_url: 'https://api.github.com/repos/docker/test-docker-action/collaborators{/collaborator}',
comments_url: 'https://api.github.com/repos/docker/test-docker-action/comments{/number}',
commits_url: 'https://api.github.com/repos/docker/test-docker-action/commits{/sha}',
compare_url: 'https://api.github.com/repos/docker/test-docker-action/compare/{base}...{head}',
contents_url: 'https://api.github.com/repos/docker/test-docker-action/contents/{+path}',
contributors_url: 'https://api.github.com/repos/docker/test-docker-action/contributors',
created_at: 1596792180,
default_branch: 'master',
deployments_url: 'https://api.github.com/repos/docker/test-docker-action/deployments',
description: 'Test "Docker" Actions',
disabled: false,
downloads_url: 'https://api.github.com/repos/docker/test-docker-action/downloads',
events_url: 'https://api.github.com/repos/docker/test-docker-action/events',
fork: false,
forks: 1,
forks_count: 1,
forks_url: 'https://api.github.com/repos/docker/test-docker-action/forks',
full_name: 'docker/test-docker-action',
git_commits_url: 'https://api.github.com/repos/docker/test-docker-action/git/commits{/sha}',
git_refs_url: 'https://api.github.com/repos/docker/test-docker-action/git/refs{/sha}',
git_tags_url: 'https://api.github.com/repos/docker/test-docker-action/git/tags{/sha}',
git_url: 'git://github.com/docker/test-docker-action.git',
has_downloads: true,
has_issues: true,
has_pages: false,
has_projects: true,
has_wiki: true,
homepage: '',
hooks_url: 'https://api.github.com/repos/docker/test-docker-action/hooks',
html_url: 'https://github.com/docker/test-docker-action',
id: 285789493,
is_template: false,
issue_comment_url: 'https://api.github.com/repos/docker/test-docker-action/issues/comments{/number}',
issue_events_url: 'https://api.github.com/repos/docker/test-docker-action/issues/events{/number}',
issues_url: 'https://api.github.com/repos/docker/test-docker-action/issues{/number}',
keys_url: 'https://api.github.com/repos/docker/test-docker-action/keys{/key_id}',
labels_url: 'https://api.github.com/repos/docker/test-docker-action/labels{/name}',
language: 'JavaScript',
languages_url: 'https://api.github.com/repos/docker/test-docker-action/languages',
license: {
key: 'mit',
name: 'MIT License',
node_id: 'MDc6TGljZW5zZTEz',
spdx_id: 'MIT',
url: 'https://api.github.com/licenses/mit'
},
master_branch: 'master',
merges_url: 'https://api.github.com/repos/docker/test-docker-action/merges',
milestones_url: 'https://api.github.com/repos/docker/test-docker-action/milestones{/number}',
mirror_url: null,
name: 'test-docker-action',
node_id: 'MDEwOlJlcG9zaXRvcnkyODU3ODk0OTM=',
notifications_url: 'https://api.github.com/repos/docker/test-docker-action/notifications{?since,all,participating}',
open_issues: 6,
open_issues_count: 6,
organization: 'docker',
owner: {
avatar_url: 'https://avatars.githubusercontent.com/u/5429470?v=4',
email: 'info@docker.com',
events_url: 'https://api.github.com/users/docker/events{/privacy}',
followers_url: 'https://api.github.com/users/docker/followers',
following_url: 'https://api.github.com/users/docker/following{/other_user}',
gists_url: 'https://api.github.com/users/docker/gists{/gist_id}',
gravatar_id: '',
html_url: 'https://github.com/docker',
id: 5429470,
login: 'docker',
name: 'docker',
node_id: 'MDEyOk9yZ2FuaXphdGlvbjU0Mjk0NzA=',
organizations_url: 'https://api.github.com/users/docker/orgs',
received_events_url: 'https://api.github.com/users/docker/received_events',
repos_url: 'https://api.github.com/users/docker/repos',
site_admin: false,
starred_url: 'https://api.github.com/users/docker/starred{/owner}{/repo}',
subscriptions_url: 'https://api.github.com/users/docker/subscriptions',
type: 'Organization',
url: 'https://api.github.com/users/docker'
},
private: true,
pulls_url: 'https://api.github.com/repos/docker/test-docker-action/pulls{/number}',
pushed_at: 1650360446,
releases_url: 'https://api.github.com/repos/docker/test-docker-action/releases{/id}',
size: 796,
ssh_url: 'git@github.com:docker/test-docker-action.git',
stargazers: 0,
stargazers_count: 0,
stargazers_url: 'https://api.github.com/repos/docker/test-docker-action/stargazers',
statuses_url: 'https://api.github.com/repos/docker/test-docker-action/statuses/{sha}',
subscribers_url: 'https://api.github.com/repos/docker/test-docker-action/subscribers',
subscription_url: 'https://api.github.com/repos/docker/test-docker-action/subscription',
svn_url: 'https://github.com/docker/test-docker-action',
tags_url: 'https://api.github.com/repos/docker/test-docker-action/tags',
teams_url: 'https://api.github.com/repos/docker/test-docker-action/teams',
topics: [],
trees_url: 'https://api.github.com/repos/docker/test-docker-action/git/trees{/sha}',
updated_at: '2022-04-19T09:05:09Z',
url: 'https://github.com/docker/test-docker-action',
visibility: 'private',
watchers: 0,
watchers_count: 0
},
sender: {
avatar_url: 'https://avatars.githubusercontent.com/u/1951866?v=4',
events_url: 'https://api.github.com/users/crazy-max/events{/privacy}',
followers_url: 'https://api.github.com/users/crazy-max/followers',
following_url: 'https://api.github.com/users/crazy-max/following{/other_user}',
gists_url: 'https://api.github.com/users/crazy-max/gists{/gist_id}',
gravatar_id: '',
html_url: 'https://github.com/crazy-max',
id: 1951866,
login: 'crazy-max',
node_id: 'MDQ6VXNlcjE5NTE4NjY=',
organizations_url: 'https://api.github.com/users/crazy-max/orgs',
received_events_url: 'https://api.github.com/users/crazy-max/received_events',
repos_url: 'https://api.github.com/users/crazy-max/repos',
site_admin: false,
starred_url: 'https://api.github.com/users/crazy-max/starred{/owner}{/repo}',
subscriptions_url: 'https://api.github.com/users/crazy-max/subscriptions',
type: 'User',
url: 'https://api.github.com/users/crazy-max'
}
}
},
getOctokit: vi.fn()
}));

View File

@@ -1,5 +1,5 @@
/**
* Copyright 2023 actions-toolkit authors
* Copyright 2026 actions-toolkit authors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -14,6 +14,6 @@
* limitations under the License.
*/
import {Context as GitHubContext} from '@actions/github/lib/context';
import type {Reporter} from 'vitest/node';
export type Context = GitHubContext;
export declare const vitestAllSkippedReporter: () => Reporter;

View File

@@ -0,0 +1,59 @@
/**
* Copyright 2026 actions-toolkit authors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import fs from 'node:fs';
import path from 'node:path';
export const vitestAllSkippedReporter = () => {
let vitest;
let hasExecutedTest;
let hasAnyCollectedTest;
const getFlagPath = () => {
const reportsDirectory = vitest?.config?.coverage?.reportsDirectory ?? 'coverage';
return path.join(reportsDirectory, 'allSkipped.txt');
};
return {
onInit(ctx) {
vitest = ctx;
hasExecutedTest = false;
hasAnyCollectedTest = false;
},
onTestCaseReady() {
hasAnyCollectedTest = true;
},
onTestCaseResult(testCase) {
const state = testCase.result()?.state;
if (state === 'passed' || state === 'failed') {
hasExecutedTest = true;
}
},
onTestRunEnd() {
if (!vitest?.config?.coverage?.enabled) {
return;
}
const allSkipped = hasAnyCollectedTest && !hasExecutedTest;
const flagPath = getFlagPath();
if (allSkipped) {
fs.mkdirSync(path.dirname(flagPath), {recursive: true});
fs.writeFileSync(flagPath, '');
} else if (fs.existsSync(flagPath)) {
fs.rmSync(flagPath);
}
}
};
};

View File

@@ -14,14 +14,14 @@
* limitations under the License.
*/
import {describe, expect, it, jest, test} from '@jest/globals';
import {describe, expect, it, vi, test} from 'vitest';
import {BuildKit} from '../../src/buildkit/buildkit';
import {Builder} from '../../src/buildx/builder';
import {BuildKit} from '../../src/buildkit/buildkit.js';
import {Builder} from '../../src/buildx/builder.js';
import {BuilderInfo} from '../../src/types/buildx/builder';
import {BuilderInfo} from '../../src/types/buildx/builder.js';
jest.spyOn(Builder.prototype, 'inspect').mockImplementation(async (): Promise<BuilderInfo> => {
vi.spyOn(Builder.prototype, 'inspect').mockImplementation(async (): Promise<BuilderInfo> => {
return {
name: 'builder2',
driver: 'docker-container',
@@ -54,7 +54,7 @@ describe('satisfies', () => {
test.each([
['builder2', '>=0.10.0', true],
['builder2', '>0.11.0', false]
])('given %p', async (builderName, range, expected) => {
])('given %o', async (builderName, range, expected) => {
const buildkit = new BuildKit();
expect(await buildkit.versionSatisfies(builderName, range)).toBe(expected);
});

View File

@@ -14,25 +14,25 @@
* limitations under the License.
*/
import {describe, expect, jest, test, afterEach} from '@jest/globals';
import {describe, expect, vi, test, afterEach} from 'vitest';
import fs from 'fs';
import os from 'os';
import path from 'path';
import * as rimraf from 'rimraf';
import {BuildKit} from '../../src/buildkit/buildkit';
import {Context} from '../../src/context';
import {BuildKit} from '../../src/buildkit/buildkit.js';
import {Context} from '../../src/context.js';
const fixturesDir = path.join(__dirname, '..', '.fixtures');
const tmpDir = fs.mkdtempSync(path.join(process.env.TEMP || os.tmpdir(), 'buildkit-config-'));
const tmpName = path.join(tmpDir, '.tmpname-jest');
const tmpName = path.join(tmpDir, '.tmpname-vi');
jest.spyOn(Context, 'tmpDir').mockImplementation((): string => {
vi.spyOn(Context, 'tmpDir').mockImplementation((): string => {
fs.mkdirSync(tmpDir, {recursive: true});
return tmpDir;
});
jest.spyOn(Context, 'tmpName').mockImplementation((): string => {
vi.spyOn(Context, 'tmpName').mockImplementation((): string => {
return tmpName;
});
@@ -53,7 +53,7 @@ describe('resolve', () => {
`,
null
]
])('given %p config', async (val: string, file: boolean, exValue: string, error: Error | null) => {
])('given %o config', async (val: string, file: boolean, exValue: string, error: Error | null) => {
try {
const buildkit = new BuildKit();
let config: string;
@@ -66,7 +66,7 @@ describe('resolve', () => {
const configValue = fs.readFileSync(tmpName, 'utf-8');
expect(configValue).toEqual(exValue);
} catch (e) {
// eslint-disable-next-line jest/no-conditional-expect
// eslint-disable-next-line vitest/no-conditional-expect
expect(e.message).toEqual(error?.message);
}
});

View File

@@ -14,14 +14,14 @@
* limitations under the License.
*/
import {beforeEach, describe, expect, jest, test} from '@jest/globals';
import {beforeEach, describe, expect, vi, test} from 'vitest';
import {Git} from '../../src/buildkit/git';
import {Git} from '../../src/buildkit/git.js';
import {GitRef, GitURL} from '../../src/types/buildkit/git';
import {GitRef, GitURL} from '../../src/types/buildkit/git.js';
beforeEach(() => {
jest.restoreAllMocks();
vi.restoreAllMocks();
});
describe('parseURL', () => {
@@ -181,7 +181,7 @@ describe('parseURL', () => {
} as GitURL,
false
],
])('given %p', async (ref: string, expected: GitURL, expectedErr: boolean) => {
])('given %o', async (ref: string, expected: GitURL, expectedErr: boolean) => {
try {
const got = Git.parseURL(ref);
expect(got.scheme).toEqual(expected.scheme);
@@ -195,7 +195,7 @@ describe('parseURL', () => {
if (!expectedErr) {
console.log(err);
}
// eslint-disable-next-line jest/no-conditional-expect
// eslint-disable-next-line vitest/no-conditional-expect
expect(expectedErr).toBeTruthy();
}
});
@@ -329,7 +329,7 @@ describe('parseRef', () => {
'.git',
undefined
],
])('given %p', async (ref: string, expected: GitRef | undefined) => {
])('given %o', async (ref: string, expected: GitRef | undefined) => {
try {
const got = Git.parseRef(ref);
expect(got).toEqual(expected);
@@ -337,7 +337,7 @@ describe('parseRef', () => {
if (expected) {
console.log(err);
}
// eslint-disable-next-line jest/no-conditional-expect
// eslint-disable-next-line vitest/no-conditional-expect
expect(expected).toBeUndefined();
}
});

View File

@@ -14,12 +14,12 @@
* limitations under the License.
*/
import {describe, expect, test} from '@jest/globals';
import {describe, expect, test} from 'vitest';
import * as fs from 'fs';
import * as path from 'path';
import {Bake} from '../../src/buildx/bake';
import {BakeDefinition} from '../../src/types/buildx/bake';
import {Bake} from '../../src/buildx/bake.js';
import {BakeDefinition} from '../../src/types/buildx/bake.js';
const fixturesDir = path.join(__dirname, '..', '.fixtures');
@@ -41,7 +41,7 @@ maybe('getDefinition', () => {
// path.join(fixturesDir, 'bake-test-docker-action-remote-private.json'),
// true,
// ]
])('given %p', async (source: string, targets: string[], out: string, auth) => {
])('given %o', async (source: string, targets: string[], out: string, auth) => {
const gitAuthToken = process.env.GITHUB_TOKEN || '';
if (auth && !gitAuthToken) {
console.log(`Git auth token not available, skipping test`);

View File

@@ -14,30 +14,30 @@
* limitations under the License.
*/
import {afterEach, describe, expect, it, jest, test} from '@jest/globals';
import {afterEach, describe, expect, it, vi, test} from 'vitest';
import fs from 'fs';
import os from 'os';
import path from 'path';
import * as rimraf from 'rimraf';
import {Bake} from '../../src/buildx/bake';
import {Context} from '../../src/context';
import {Bake} from '../../src/buildx/bake.js';
import {Context} from '../../src/context.js';
import {ExecOptions} from '@actions/exec';
import {BakeDefinition} from '../../src/types/buildx/bake';
import {BuildMetadata} from '../../src/types/buildx/build';
import {BakeDefinition} from '../../src/types/buildx/bake.js';
import {BuildMetadata} from '../../src/types/buildx/build.js';
const fixturesDir = path.join(__dirname, '..', '.fixtures');
const tmpDir = fs.mkdtempSync(path.join(process.env.TEMP || os.tmpdir(), 'buildx-bake-'));
const tmpName = path.join(tmpDir, '.tmpname-jest');
const tmpName = path.join(tmpDir, '.tmpname-vi');
const metadata = JSON.parse(fs.readFileSync(path.join(fixturesDir, 'metadata-bake.json'), 'utf-8'));
jest.spyOn(Context, 'tmpDir').mockImplementation((): string => {
vi.spyOn(Context, 'tmpDir').mockImplementation((): string => {
fs.mkdirSync(tmpDir, {recursive: true});
return tmpDir;
});
jest.spyOn(Context, 'tmpName').mockImplementation((): string => {
vi.spyOn(Context, 'tmpName').mockImplementation((): string => {
return tmpName;
});
@@ -102,7 +102,7 @@ describe('getDefinition', () => {
undefined,
path.join(fixturesDir, 'bake-03-default.json')
],
])('given %p', async (files: string[], targets: string[], overrides: string[], execOptions: ExecOptions | undefined, out: string) => {
])('given %o', async (files: string[], targets: string[], overrides: string[], execOptions: ExecOptions | undefined, out: string) => {
const bake = new Bake();
const expectedDef = <BakeDefinition>JSON.parse(fs.readFileSync(out, {encoding: 'utf-8'}).trim())
expect(await bake.getDefinition({
@@ -185,7 +185,7 @@ describe('hasLocalExporter', () => {
} as unknown as BakeDefinition,
true
]
])('given %o returns %p', async (def: BakeDefinition, expected: boolean) => {
])('given %o returns %o', async (def: BakeDefinition, expected: boolean) => {
expect(Bake.hasLocalExporter(def)).toEqual(expected);
});
});
@@ -285,7 +285,7 @@ describe('hasTarExporter', () => {
} as unknown as BakeDefinition,
false
],
])('given %o returns %p', async (def: BakeDefinition, expected: boolean) => {
])('given %o returns %o', async (def: BakeDefinition, expected: boolean) => {
expect(Bake.hasTarExporter(def)).toEqual(expected);
});
});
@@ -440,7 +440,7 @@ describe('hasDockerExporter', () => {
true,
true
],
])('given %o and load:%p returns %p', async (def: BakeDefinition, expected: boolean, load: boolean | undefined) => {
])('given %o and load: %o returns %o', async (def: BakeDefinition, expected: boolean, load: boolean | undefined) => {
expect(Bake.hasDockerExporter(def, load)).toEqual(expected);
});
});
@@ -481,7 +481,7 @@ describe('hasGitAuthTokenSecret', () => {
} as unknown as BakeDefinition,
true
],
])('given %o returns %p', async (def: BakeDefinition, expected: boolean) => {
])('given %o returns %o', async (def: BakeDefinition, expected: boolean) => {
expect(Bake.hasGitAuthTokenSecret(def)).toEqual(expected);
});
});
@@ -536,7 +536,7 @@ describe('hasProvenanceAttestation', () => {
} as unknown as BakeDefinition,
true
]
])('given %o returns %p', async (def: BakeDefinition, expected: boolean) => {
])('given %o returns %o', async (def: BakeDefinition, expected: boolean) => {
expect(Bake.hasProvenanceAttestation(def)).toEqual(expected);
});
});
@@ -591,7 +591,7 @@ describe('hasSBOMAttestation', () => {
} as unknown as BakeDefinition,
true
]
])('given %o returns %p', async (def: BakeDefinition, expected: boolean) => {
])('given %o returns %o', async (def: BakeDefinition, expected: boolean) => {
expect(Bake.hasSBOMAttestation(def)).toEqual(expected);
});
});

View File

@@ -14,26 +14,29 @@
* limitations under the License.
*/
import {afterEach, beforeEach, describe, expect, it, jest, test} from '@jest/globals';
import {afterEach, beforeEach, describe, expect, it, vi, test} from 'vitest';
import fs from 'fs';
import os from 'os';
import path from 'path';
import * as rimraf from 'rimraf';
import {Context} from '../../src/context';
import {Build} from '../../src/buildx/build';
import {Context} from '../../src/context.js';
import {Build} from '../../src/buildx/build.js';
import {Buildx} from '../../src/buildx/buildx.js';
import {GitContextFormat} from '../../src/types/buildx/build.js';
const fixturesDir = path.join(__dirname, '..', '.fixtures');
const tmpDir = fs.mkdtempSync(path.join(process.env.TEMP || os.tmpdir(), 'buildx-build-'));
const tmpName = path.join(tmpDir, '.tmpname-jest');
const tmpName = path.join(tmpDir, '.tmpname-vi');
const metadata = JSON.parse(fs.readFileSync(path.join(fixturesDir, 'metadata-build.json'), 'utf-8'));
jest.spyOn(Context, 'tmpDir').mockImplementation((): string => {
vi.spyOn(Context, 'tmpDir').mockImplementation((): string => {
fs.mkdirSync(tmpDir, {recursive: true});
return tmpDir;
});
jest.spyOn(Context, 'tmpName').mockImplementation((): string => {
vi.spyOn(Context, 'tmpName').mockImplementation((): string => {
return tmpName;
});
@@ -41,6 +44,99 @@ afterEach(() => {
rimraf.sync(tmpDir);
});
describe('gitContext', () => {
const originalEnv = process.env;
beforeEach(() => {
vi.resetModules();
process.env = {
...originalEnv,
DOCKER_DEFAULT_GIT_CONTEXT_PR_HEAD_REF: '',
BUILDX_SEND_GIT_QUERY_AS_INPUT: ''
};
});
afterEach(() => {
process.env = originalEnv;
});
type GitContextTestCase = {
ref: string;
checksum?: string;
subdir?: string;
attrs?: Record<string, string>;
format: GitContextFormat | undefined;
prHeadRef: boolean;
sendGitQueryAsInput: boolean;
buildxQuerySupport: boolean;
};
// prettier-ignore
const gitContextCases: [GitContextTestCase, string][] = [
// no format set (defaults to fragment)
[{ref: 'refs/heads/master', format: undefined, prHeadRef: false, sendGitQueryAsInput: false, buildxQuerySupport: true}, 'https://github.com/docker/actions-toolkit.git#860c1904a1ce19322e91ac35af1ab07466440c37'],
[{ref: 'master', format: undefined, prHeadRef: false, sendGitQueryAsInput: false, buildxQuerySupport: true}, 'https://github.com/docker/actions-toolkit.git#860c1904a1ce19322e91ac35af1ab07466440c37'],
[{ref: 'refs/pull/15/merge', format: undefined, prHeadRef: false, sendGitQueryAsInput: false, buildxQuerySupport: true}, 'https://github.com/docker/actions-toolkit.git#refs/pull/15/merge'],
[{ref: 'refs/tags/v1.0.0', format: undefined, prHeadRef: false, sendGitQueryAsInput: false, buildxQuerySupport: true}, 'https://github.com/docker/actions-toolkit.git#860c1904a1ce19322e91ac35af1ab07466440c37'],
[{ref: 'refs/pull/15/merge', format: undefined, prHeadRef: true, sendGitQueryAsInput: false, buildxQuerySupport: true}, 'https://github.com/docker/actions-toolkit.git#refs/pull/15/head'],
// no format set (defaults to query only when client-side query resolution is enabled and supported)
[{ref: 'refs/heads/master', format: undefined, prHeadRef: false, sendGitQueryAsInput: true, buildxQuerySupport: true}, 'https://github.com/docker/actions-toolkit.git?ref=refs/heads/master&checksum=860c1904a1ce19322e91ac35af1ab07466440c37'],
[{ref: 'refs/pull/15/merge', format: undefined, prHeadRef: false, sendGitQueryAsInput: true, buildxQuerySupport: true}, 'https://github.com/docker/actions-toolkit.git?ref=refs/pull/15/merge&checksum=860c1904a1ce19322e91ac35af1ab07466440c37'],
[{ref: 'refs/pull/15/merge', format: undefined, prHeadRef: true, sendGitQueryAsInput: true, buildxQuerySupport: true}, 'https://github.com/docker/actions-toolkit.git?ref=refs/pull/15/head&checksum=860c1904a1ce19322e91ac35af1ab07466440c37'],
[{ref: 'refs/heads/master', format: undefined, prHeadRef: false, sendGitQueryAsInput: true, buildxQuerySupport: false}, 'https://github.com/docker/actions-toolkit.git#860c1904a1ce19322e91ac35af1ab07466440c37'],
[{ref: 'refs/heads/master', format: undefined, prHeadRef: false, sendGitQueryAsInput: false, buildxQuerySupport: true, attrs: {}}, 'https://github.com/docker/actions-toolkit.git#860c1904a1ce19322e91ac35af1ab07466440c37'],
[{ref: 'refs/heads/master', checksum: undefined, format: undefined, prHeadRef: false, sendGitQueryAsInput: false, buildxQuerySupport: true, attrs: {checksum: 'cafebabe'}}, 'https://github.com/docker/actions-toolkit.git#cafebabe'],
[{ref: 'refs/heads/master', format: undefined, prHeadRef: false, sendGitQueryAsInput: false, buildxQuerySupport: true, attrs: {subdir: 'subdir'}}, 'https://github.com/docker/actions-toolkit.git#860c1904a1ce19322e91ac35af1ab07466440c37:subdir'],
[{ref: 'refs/heads/master', format: undefined, prHeadRef: false, sendGitQueryAsInput: false, buildxQuerySupport: true, attrs: {ref: 'refs/tags/v1.0.0'}}, 'https://github.com/docker/actions-toolkit.git#860c1904a1ce19322e91ac35af1ab07466440c37'],
[{ref: 'refs/heads/master', format: undefined, prHeadRef: false, sendGitQueryAsInput: false, buildxQuerySupport: true, attrs: {'keep-git-dir': 'true'}}, 'https://github.com/docker/actions-toolkit.git?ref=refs/heads/master&checksum=860c1904a1ce19322e91ac35af1ab07466440c37&keep-git-dir=true'],
[{ref: 'refs/heads/master', format: undefined, prHeadRef: false, sendGitQueryAsInput: false, buildxQuerySupport: false, attrs: {'keep-git-dir': 'true'}}, 'https://github.com/docker/actions-toolkit.git?ref=refs/heads/master&checksum=860c1904a1ce19322e91ac35af1ab07466440c37&keep-git-dir=true'],
[{ref: 'refs/heads/master', checksum: undefined, format: undefined, prHeadRef: false, sendGitQueryAsInput: false, buildxQuerySupport: true, attrs: {checksum: 'cafebabe', 'keep-git-dir': 'true'}}, 'https://github.com/docker/actions-toolkit.git?ref=refs/heads/master&checksum=cafebabe&keep-git-dir=true'],
[{ref: 'refs/heads/master', format: undefined, prHeadRef: false, sendGitQueryAsInput: false, buildxQuerySupport: true, attrs: {submodules: 'false'}}, 'https://github.com/docker/actions-toolkit.git?ref=refs/heads/master&checksum=860c1904a1ce19322e91ac35af1ab07466440c37&submodules=false'],
[{ref: 'refs/heads/master', format: undefined, prHeadRef: false, sendGitQueryAsInput: false, buildxQuerySupport: false, attrs: {submodules: 'false'}}, 'https://github.com/docker/actions-toolkit.git?ref=refs/heads/master&checksum=860c1904a1ce19322e91ac35af1ab07466440c37&submodules=false'],
// query format
[{ref: 'refs/heads/master', format: 'query', prHeadRef: false, sendGitQueryAsInput: false, buildxQuerySupport: true}, 'https://github.com/docker/actions-toolkit.git?ref=refs/heads/master&checksum=860c1904a1ce19322e91ac35af1ab07466440c37'],
[{ref: 'master', format: 'query', prHeadRef: false, sendGitQueryAsInput: false, buildxQuerySupport: true}, 'https://github.com/docker/actions-toolkit.git?ref=refs/heads/master&checksum=860c1904a1ce19322e91ac35af1ab07466440c37'],
[{ref: 'refs/pull/15/merge', format: 'query', prHeadRef: false, sendGitQueryAsInput: false, buildxQuerySupport: true}, 'https://github.com/docker/actions-toolkit.git?ref=refs/pull/15/merge&checksum=860c1904a1ce19322e91ac35af1ab07466440c37'],
[{ref: 'refs/tags/v1.0.0', format: 'query', prHeadRef: false, sendGitQueryAsInput: false, buildxQuerySupport: true}, 'https://github.com/docker/actions-toolkit.git?ref=refs/tags/v1.0.0&checksum=860c1904a1ce19322e91ac35af1ab07466440c37'],
[{ref: 'refs/pull/15/merge', format: 'query', prHeadRef: true, sendGitQueryAsInput: false, buildxQuerySupport: true}, 'https://github.com/docker/actions-toolkit.git?ref=refs/pull/15/head&checksum=860c1904a1ce19322e91ac35af1ab07466440c37'],
[{ref: 'refs/heads/master', format: 'query', prHeadRef: false, sendGitQueryAsInput: false, buildxQuerySupport: true, subdir: 'subdir'}, 'https://github.com/docker/actions-toolkit.git?ref=refs/heads/master&checksum=860c1904a1ce19322e91ac35af1ab07466440c37&subdir=subdir'],
[{ref: 'refs/heads/master', format: 'query', prHeadRef: false, sendGitQueryAsInput: false, buildxQuerySupport: true, subdir: '.'}, 'https://github.com/docker/actions-toolkit.git?ref=refs/heads/master&checksum=860c1904a1ce19322e91ac35af1ab07466440c37'],
[{ref: 'refs/heads/master', checksum: undefined, format: 'query', prHeadRef: false, sendGitQueryAsInput: false, buildxQuerySupport: true, attrs: {ref: 'refs/tags/v1.0.0', checksum: 'cafebabe', subdir: 'subdir', submodules: 'false'}}, 'https://github.com/docker/actions-toolkit.git?ref=refs/heads/master&checksum=cafebabe&subdir=subdir&submodules=false'],
[{ref: 'refs/heads/master', format: 'query', prHeadRef: false, sendGitQueryAsInput: false, buildxQuerySupport: true, subdir: 'subdir', attrs: {'keep-git-dir': 'true'}}, 'https://github.com/docker/actions-toolkit.git?ref=refs/heads/master&checksum=860c1904a1ce19322e91ac35af1ab07466440c37&subdir=subdir&keep-git-dir=true'],
[{ref: 'refs/heads/master', format: 'query', prHeadRef: false, sendGitQueryAsInput: false, buildxQuerySupport: true, attrs: {submodules: 'true'}}, 'https://github.com/docker/actions-toolkit.git?ref=refs/heads/master&checksum=860c1904a1ce19322e91ac35af1ab07466440c37&submodules=true'],
[{ref: 'refs/heads/master', format: 'query', prHeadRef: false, sendGitQueryAsInput: false, buildxQuerySupport: true, attrs: {submodules: 'false'}}, 'https://github.com/docker/actions-toolkit.git?ref=refs/heads/master&checksum=860c1904a1ce19322e91ac35af1ab07466440c37&submodules=false'],
[{ref: 'refs/heads/master', format: 'query', prHeadRef: false, sendGitQueryAsInput: false, buildxQuerySupport: true, attrs: {'keep-git-dir': 'true', submodules: 'false'}}, 'https://github.com/docker/actions-toolkit.git?ref=refs/heads/master&checksum=860c1904a1ce19322e91ac35af1ab07466440c37&keep-git-dir=true&submodules=false'],
// fragment format
[{ref: 'refs/heads/master', format: 'fragment', prHeadRef: false, sendGitQueryAsInput: false, buildxQuerySupport: true}, 'https://github.com/docker/actions-toolkit.git#860c1904a1ce19322e91ac35af1ab07466440c37'],
[{ref: 'master', format: 'fragment', prHeadRef: false, sendGitQueryAsInput: false, buildxQuerySupport: true}, 'https://github.com/docker/actions-toolkit.git#860c1904a1ce19322e91ac35af1ab07466440c37'],
[{ref: 'refs/pull/15/merge', format: 'fragment', prHeadRef: false, sendGitQueryAsInput: false, buildxQuerySupport: true}, 'https://github.com/docker/actions-toolkit.git#refs/pull/15/merge'],
[{ref: 'refs/tags/v1.0.0', format: 'fragment', prHeadRef: false, sendGitQueryAsInput: false, buildxQuerySupport: true}, 'https://github.com/docker/actions-toolkit.git#860c1904a1ce19322e91ac35af1ab07466440c37'],
[{ref: 'refs/pull/15/merge', format: 'fragment', prHeadRef: true, sendGitQueryAsInput: false, buildxQuerySupport: true}, 'https://github.com/docker/actions-toolkit.git#refs/pull/15/head'],
[{ref: 'refs/heads/master', checksum: undefined, format: 'fragment', prHeadRef: false, sendGitQueryAsInput: false, buildxQuerySupport: true, attrs: {checksum: 'cafebabe', subdir: 'subdir', ref: 'refs/tags/v1.0.0'}}, 'https://github.com/docker/actions-toolkit.git#cafebabe:subdir'],
[{ref: 'refs/heads/master', format: 'fragment', prHeadRef: false, sendGitQueryAsInput: false, buildxQuerySupport: true, attrs: {'keep-git-dir': 'true'}}, 'https://github.com/docker/actions-toolkit.git#860c1904a1ce19322e91ac35af1ab07466440c37'],
[{ref: 'refs/heads/master', format: 'fragment', prHeadRef: false, sendGitQueryAsInput: false, buildxQuerySupport: true, subdir: 'subdir'}, 'https://github.com/docker/actions-toolkit.git#860c1904a1ce19322e91ac35af1ab07466440c37:subdir'],
[{ref: 'refs/heads/master', format: 'fragment', prHeadRef: false, sendGitQueryAsInput: false, buildxQuerySupport: true, subdir: '.'}, 'https://github.com/docker/actions-toolkit.git#860c1904a1ce19322e91ac35af1ab07466440c37'],
[{ref: 'refs/pull/15/merge', format: 'fragment', prHeadRef: true, sendGitQueryAsInput: false, buildxQuerySupport: true, subdir: 'subdir'}, 'https://github.com/docker/actions-toolkit.git#refs/pull/15/head:subdir'],
];
test.each(gitContextCases)('given %o should return %o', async (input: GitContextTestCase, expected: string) => {
const {ref, checksum, format, prHeadRef, sendGitQueryAsInput, buildxQuerySupport, subdir, attrs} = input;
process.env.DOCKER_DEFAULT_GIT_CONTEXT_PR_HEAD_REF = prHeadRef ? 'true' : '';
process.env.BUILDX_SEND_GIT_QUERY_AS_INPUT = sendGitQueryAsInput ? 'true' : '';
const buildx = new Buildx();
vi.spyOn(buildx, 'versionSatisfies').mockResolvedValue(buildxQuerySupport);
const build = new Build({buildx});
expect(
await build.gitContext({
ref,
...('checksum' in input ? {checksum} : {checksum: '860c1904a1ce19322e91ac35af1ab07466440c37'}),
format,
subdir,
attrs
})
).toEqual(expected);
});
});
describe('resolveImageID', () => {
it('matches', async () => {
const imageID = 'sha256:bfb45ab72e46908183546477a08f8867fc40cebadd00af54b071b097aed127a9';
@@ -136,7 +232,7 @@ describe('getProvenanceInput', () => {
'',
''
],
])('given input %p', async (input: string, expected: string) => {
])('given input %o', async (input: string, expected: string) => {
setInput('provenance', input);
expect(Build.getProvenanceInput('provenance')).toEqual(expected);
});
@@ -165,7 +261,7 @@ describe('resolveProvenanceAttrs', () => {
'',
'builder-id=https://github.com/docker/actions-toolkit/actions/runs/2188748038/attempts/2'
],
])('given %p', async (input: string, expected: string) => {
])('given %o', async (input: string, expected: string) => {
expect(Build.resolveProvenanceAttrs(input)).toEqual(expected);
});
});
@@ -180,7 +276,7 @@ describe('resolveSecret', () => {
['=bbbbbbb', false, '', '', new Error('=bbbbbbb is not a valid secret')],
[`foo=${path.join(fixturesDir, 'secret.txt')}`, true, 'foo', 'bar', null],
[`notfound=secret`, true, '', '', new Error('secret file secret not found')]
])('given %p key and %p secret', async (kvp: string, file: boolean, exKey: string, exValue: string, error: Error | null) => {
])('given %o key and %o secret', async (kvp: string, file: boolean, exKey: string, exValue: string, error: Error | null) => {
try {
let secret: string;
if (file) {
@@ -191,7 +287,7 @@ describe('resolveSecret', () => {
expect(secret).toEqual(`id=${exKey},src=${tmpName}`);
expect(fs.readFileSync(tmpName, 'utf-8')).toEqual(exValue);
} catch (e) {
// eslint-disable-next-line jest/no-conditional-expect
// eslint-disable-next-line vitest/no-conditional-expect
expect(e.message).toEqual(error?.message);
}
});
@@ -201,12 +297,12 @@ describe('resolveSecret', () => {
['FOO=', 'FOO', '', new Error('FOO= is not a valid secret')],
['=bar', '', '', new Error('=bar is not a valid secret')],
['FOO=bar=baz', 'FOO', 'bar=baz', null]
])('given %p key and %p env', async (kvp: string, exKey: string, exValue: string, error: Error | null) => {
])('given %o key and %o env', async (kvp: string, exKey: string, exValue: string, error: Error | null) => {
try {
const secret = Build.resolveSecretEnv(kvp);
expect(secret).toEqual(`id=${exKey},env=${exValue}`);
} catch (e) {
// eslint-disable-next-line jest/no-conditional-expect
// eslint-disable-next-line vitest/no-conditional-expect
expect(e.message).toEqual(error?.message);
}
});
@@ -255,7 +351,7 @@ describe('resolveCacheToAttrs', () => {
'abcd1234',
'type=gha,repository=foo/bar,mode=max,ghtoken=abcd1234',
],
])('given %p', async (input: string, githubToken: string | undefined, expected: string) => {
])('given %o', async (input: string, githubToken: string | undefined, expected: string) => {
expect(Build.resolveCacheToAttrs(input, githubToken)).toEqual(expected);
});
});
@@ -271,7 +367,7 @@ describe('hasLocalExporter', () => {
[['"type=tar","dest=/tmp/image.tar"'], false],
[['" type= local" , dest=./release-out'], true],
[['.'], true]
])('given %p returns %p', async (exporters: Array<string>, expected: boolean) => {
])('given %o returns %o', async (exporters: Array<string>, expected: boolean) => {
expect(Build.hasLocalExporter(exporters)).toEqual(expected);
});
});
@@ -287,7 +383,7 @@ describe('hasTarExporter', () => {
[['"type=tar","dest=/tmp/image.tar"'], true],
[['" type= local" , dest=./release-out'], false],
[['.'], false]
])('given %p returns %p', async (exporters: Array<string>, expected: boolean) => {
])('given %o returns %o', async (exporters: Array<string>, expected: boolean) => {
expect(Build.hasTarExporter(exporters)).toEqual(expected);
});
});
@@ -305,7 +401,7 @@ describe('hasDockerExporter', () => {
[['type=docker'], true, false],
[['type=docker'], true, true],
[['.'], true, true],
])('given %p returns %p', async (exporters: Array<string>, expected: boolean, load: boolean | undefined) => {
])('given %o returns %o', async (exporters: Array<string>, expected: boolean, load: boolean | undefined) => {
expect(Build.hasDockerExporter(exporters, load)).toEqual(expected);
});
});
@@ -316,7 +412,7 @@ describe('hasAttestationType', () => {
['type=provenance,mode=min', 'provenance', true],
['type=sbom,true', 'sbom', true],
['type=foo,bar', 'provenance', false],
])('given %p for %p returns %p', async (attrs: string, name: string, expected: boolean) => {
])('given %o for %o returns %o', async (attrs: string, name: string, expected: boolean) => {
expect(Build.hasAttestationType(name, attrs)).toEqual(expected);
});
});
@@ -340,7 +436,7 @@ describe('resolveAttestationAttrs', () => {
'',
''
],
])('given %p', async (input: string, expected: string) => {
])('given %o', async (input: string, expected: string) => {
expect(Build.resolveAttestationAttrs(input)).toEqual(expected);
});
});
@@ -348,10 +444,11 @@ describe('resolveAttestationAttrs', () => {
describe('hasGitAuthTokenSecret', () => {
// prettier-ignore
test.each([
[['A_SECRET=abcdef0123456789'], false],
[['GIT_AUTH_TOKEN=abcdefghijklmno=0123456789'], true],
])('given %p secret', async (kvp: Array<string>, expected: boolean) => {
expect(Build.hasGitAuthTokenSecret(kvp)).toBe(expected);
[['A_SECRET=abcdef0123456789'], undefined, false],
[['GIT_AUTH_TOKEN=abcdefghijklmno=0123456789'], undefined, true],
[['GIT_AUTH_TOKEN.github.com=abcdefghijklmno=0123456789'], 'github.com', true],
])('given %o secret', async (kvp: Array<string>, domain: string | undefined, expected: boolean) => {
expect(Build.hasGitAuthTokenSecret(kvp, domain)).toBe(expected);
});
});

View File

@@ -14,18 +14,18 @@
* limitations under the License.
*/
import {describe, expect, it, jest, test} from '@jest/globals';
import {describe, expect, it, vi, test} from 'vitest';
import * as fs from 'fs';
import * as path from 'path';
import {Builder} from '../../src/buildx/builder';
import {Exec} from '../../src/exec';
import {Builder} from '../../src/buildx/builder.js';
import {Exec} from '../../src/exec.js';
import {BuilderInfo} from '../../src/types/buildx/builder';
import {BuilderInfo} from '../../src/types/buildx/builder.js';
const fixturesDir = path.join(__dirname, '..', '.fixtures');
jest.spyOn(Builder.prototype, 'inspect').mockImplementation(async (): Promise<BuilderInfo> => {
vi.spyOn(Builder.prototype, 'inspect').mockImplementation(async (): Promise<BuilderInfo> => {
return {
name: 'builder2',
driver: 'docker-container',
@@ -46,7 +46,7 @@ jest.spyOn(Builder.prototype, 'inspect').mockImplementation(async (): Promise<Bu
describe('exists', () => {
it('valid', async () => {
const execSpy = jest.spyOn(Exec, 'getExecOutput');
const execSpy = vi.spyOn(Exec, 'getExecOutput');
const builder = new Builder();
await builder.exists('foo');
expect(execSpy).toHaveBeenCalledWith(`docker`, ['buildx', 'inspect', 'foo'], {
@@ -548,7 +548,7 @@ baz = qux
]
}
],
])('given %p', async (inspectFile, expected) => {
])('given %o', async (inspectFile, expected) => {
expect(await Builder.parseInspect(fs.readFileSync(path.join(fixturesDir, inspectFile)).toString())).toEqual(expected);
});
});

View File

@@ -14,16 +14,16 @@
* limitations under the License.
*/
import {describe, expect, it} from '@jest/globals';
import {describe, expect, it} from 'vitest';
import fs from 'fs';
import os from 'os';
import path from 'path';
import * as core from '@actions/core';
import {Buildx} from '../../src/buildx/buildx';
import {Build} from '../../src/buildx/build';
import {Bake} from '../../src/buildx/bake';
import {Exec} from '../../src/exec';
import {Buildx} from '../../src/buildx/buildx.js';
import {Build} from '../../src/buildx/build.js';
import {Bake} from '../../src/buildx/bake.js';
import {Exec} from '../../src/exec.js';
const fixturesDir = path.join(__dirname, '..', '.fixtures');
const tmpDir = fs.mkdtempSync(path.join(process.env.TEMP || os.tmpdir(), 'buildx-buildx-itg-'));

View File

@@ -14,29 +14,29 @@
* limitations under the License.
*/
import {describe, expect, it, jest, test, beforeEach, afterEach} from '@jest/globals';
import {describe, expect, it, vi, test, beforeEach, afterEach} from 'vitest';
import fs from 'fs';
import os from 'os';
import path from 'path';
import * as rimraf from 'rimraf';
import * as semver from 'semver';
import {Buildx} from '../../src/buildx/buildx';
import {Context} from '../../src/context';
import {Exec} from '../../src/exec';
import {Buildx} from '../../src/buildx/buildx.js';
import {Context} from '../../src/context.js';
import {Exec} from '../../src/exec.js';
import {Cert, LocalState} from '../../src/types/buildx/buildx';
import {Cert, LocalState} from '../../src/types/buildx/buildx.js';
const fixturesDir = path.join(__dirname, '..', '.fixtures');
const tmpDir = fs.mkdtempSync(path.join(process.env.TEMP || os.tmpdir(), 'buildx-buildx-'));
const tmpName = path.join(tmpDir, '.tmpname-jest');
const tmpName = path.join(tmpDir, '.tmpname-vi');
jest.spyOn(Context, 'tmpDir').mockImplementation((): string => {
vi.spyOn(Context, 'tmpDir').mockImplementation((): string => {
fs.mkdirSync(tmpDir, {recursive: true});
return tmpDir;
});
jest.spyOn(Context, 'tmpName').mockImplementation((): string => {
vi.spyOn(Context, 'tmpName').mockImplementation((): string => {
return tmpName;
});
@@ -47,7 +47,7 @@ afterEach(() => {
describe('configDir', () => {
const originalEnv = process.env;
beforeEach(() => {
jest.resetModules();
vi.resetModules();
process.env = {
...originalEnv,
BUILDX_CONFIG: '/var/docker/buildx',
@@ -69,7 +69,7 @@ describe('configDir', () => {
describe('certsDir', () => {
const originalEnv = process.env;
beforeEach(() => {
jest.resetModules();
vi.resetModules();
process.env = {
...originalEnv,
BUILDX_CONFIG: '/var/docker/buildx'
@@ -86,7 +86,7 @@ describe('certsDir', () => {
describe('isAvailable', () => {
it('docker cli', async () => {
const execSpy = jest.spyOn(Exec, 'getExecOutput');
const execSpy = vi.spyOn(Exec, 'getExecOutput');
const buildx = new Buildx({
standalone: false
});
@@ -97,7 +97,7 @@ describe('isAvailable', () => {
});
});
it('standalone', async () => {
const execSpy = jest.spyOn(Exec, 'getExecOutput');
const execSpy = vi.spyOn(Exec, 'getExecOutput');
const buildx = new Buildx({
standalone: true
});
@@ -111,7 +111,7 @@ describe('isAvailable', () => {
describe('printVersion', () => {
it('docker cli', async () => {
const execSpy = jest.spyOn(Exec, 'exec');
const execSpy = vi.spyOn(Exec, 'exec');
const buildx = new Buildx({
standalone: false
});
@@ -121,7 +121,7 @@ describe('printVersion', () => {
});
});
it('standalone', async () => {
const execSpy = jest.spyOn(Exec, 'exec');
const execSpy = vi.spyOn(Exec, 'exec');
const buildx = new Buildx({
standalone: true
});
@@ -145,7 +145,7 @@ describe('parseVersion', () => {
['github.com/docker/buildx v0.4.1 bda4882a65349ca359216b135896bddc1d92461c', '0.4.1'],
['github.com/docker/buildx v0.4.2 fb7b670b764764dc4716df3eba07ffdae4cc47b2', '0.4.2'],
['github.com/docker/buildx f117971 f11797113e5a9b86bd976329c5dbb8a8bfdfadfa', 'f117971']
])('given %p', async (stdout, expected) => {
])('given %o', async (stdout, expected) => {
expect(Buildx.parseVersion(stdout)).toEqual(expected);
});
});
@@ -155,7 +155,7 @@ describe('versionSatisfies', () => {
['0.4.1', '>=0.3.2', true],
['bda4882a65349ca359216b135896bddc1d92461c', '>0.1.0', false],
['f117971', '>0.6.0', true]
])('given %p', async (version, range, expected) => {
])('given %o', async (version, range, expected) => {
const buildx = new Buildx();
expect(await buildx.versionSatisfies(range, version)).toBe(expected);
});
@@ -164,7 +164,7 @@ describe('versionSatisfies', () => {
describe('resolveCertsDriverOpts', () => {
const originalEnv = process.env;
beforeEach(() => {
jest.resetModules();
vi.resetModules();
process.env = {
...originalEnv,
BUILDX_CONFIG: path.join(tmpDir, 'resolveCertsDriverOpts', 'buildx')
@@ -236,7 +236,7 @@ describe('resolveCertsDriverOpts', () => {
],
[]
],
])('%p. given %p endpoint, %p driver', async (id: number, endpoint: string, driver: string, cert: Cert, expectedFiles: Array<string>, expectedOpts: Array<string>) => {
])('%o. given %o endpoint, %o driver', async (id: number, endpoint: string, driver: string, cert: Cert, expectedFiles: Array<string>, expectedOpts: Array<string>) => {
fs.mkdirSync(Buildx.certsDir, {recursive: true});
expect(Buildx.resolveCertsDriverOpts(driver, endpoint, cert)).toEqual(expectedOpts);
for (const k in expectedFiles) {
@@ -298,7 +298,7 @@ describe('localState', () => {
DockerfilePath: '-'
} as LocalState,
]
])('given %p', async (ref: string, expected: LocalState) => {
])('given %o', async (ref: string, expected: LocalState) => {
const localState = Buildx.localState(ref, path.join(fixturesDir, 'buildx-refs'));
expect(localState).toEqual(expected);
});

View File

@@ -14,16 +14,16 @@
* limitations under the License.
*/
import {describe, expect, it, test} from '@jest/globals';
import {describe, expect, it, test} from 'vitest';
import fs from 'fs';
import os from 'os';
import path from 'path';
import {Buildx} from '../../src/buildx/buildx';
import {Bake} from '../../src/buildx/bake';
import {Build} from '../../src/buildx/build';
import {History} from '../../src/buildx/history';
import {Exec} from '../../src/exec';
import {Buildx} from '../../src/buildx/buildx.js';
import {Bake} from '../../src/buildx/bake.js';
import {Build} from '../../src/buildx/build.js';
import {History} from '../../src/buildx/history.js';
import {Exec} from '../../src/exec.js';
const fixturesDir = path.join(__dirname, '..', '.fixtures');
const tmpDir = fs.mkdtempSync(path.join(process.env.TEMP || os.tmpdir(), 'buildx-history-itg-'));
@@ -187,40 +187,4 @@ maybe('export', () => {
expect(fs.existsSync(exportRes?.dockerbuildFilename)).toBe(true);
expect(exportRes?.summaries).toBeDefined();
});
it('export using container', async () => {
const buildx = new Buildx();
const build = new Build({buildx: buildx});
fs.mkdirSync(tmpDir, {recursive: true});
await expect(
(async () => {
// prettier-ignore
const buildCmd = await buildx.getCommand([
'--builder', process.env.CTN_BUILDER_NAME ?? 'default',
'build', '-f', path.join(fixturesDir, 'hello.Dockerfile'),
'--metadata-file', build.getMetadataFilePath(),
fixturesDir
]);
await Exec.exec(buildCmd.command, buildCmd.args);
})()
).resolves.not.toThrow();
const metadata = build.resolveMetadata();
expect(metadata).toBeDefined();
const buildRef = build.resolveRef(metadata);
expect(buildRef).toBeDefined();
const history = new History({buildx: buildx});
const exportRes = await history.export({
refs: [buildRef ?? ''],
useContainer: true
});
expect(exportRes).toBeDefined();
expect(exportRes?.dockerbuildFilename).toBeDefined();
expect(exportRes?.dockerbuildSize).toBeDefined();
expect(fs.existsSync(exportRes?.dockerbuildFilename)).toBe(true);
expect(exportRes?.summaries).toBeDefined();
});
});

View File

@@ -14,15 +14,15 @@
* limitations under the License.
*/
import {describe, expect, it} from '@jest/globals';
import {describe, expect, it} from 'vitest';
import * as fs from 'fs';
import * as path from 'path';
import {ImageTools} from '../../src/buildx/imagetools';
import {ImageTools} from '../../src/buildx/imagetools.js';
import {Manifest as ImageToolsManifest} from '../../src/types/buildx/imagetools';
import {Image} from '../../src/types/oci/config';
import {Descriptor} from '../../src/types/oci/descriptor';
import {Manifest as ImageToolsManifest} from '../../src/types/buildx/imagetools.js';
import {Image} from '../../src/types/oci/config.js';
import {Descriptor} from '../../src/types/oci/descriptor.js';
const fixturesDir = path.join(__dirname, '..', '.fixtures');
@@ -30,12 +30,12 @@ const maybe = !process.env.GITHUB_ACTIONS || (process.env.GITHUB_ACTIONS === 'tr
maybe('inspectImage', () => {
it('inspect single platform', async () => {
const image = await new ImageTools().inspectImage('moby/buildkit:latest@sha256:5769c54b98840147b74128f38fb0b0a049e24b11a75bd81664131edd2854593f');
const image = await new ImageTools().inspectImage({name: 'moby/buildkit:latest@sha256:5769c54b98840147b74128f38fb0b0a049e24b11a75bd81664131edd2854593f'});
const expectedImage = <Image>JSON.parse(fs.readFileSync(path.join(fixturesDir, 'imagetools-01.json'), {encoding: 'utf-8'}).trim());
expect(image).toEqual(expectedImage);
});
it('inspect multi platform', async () => {
const image = await new ImageTools().inspectImage('moby/buildkit:latest@sha256:86c0ad9d1137c186e9d455912167df20e530bdf7f7c19de802e892bb8ca16552');
const image = await new ImageTools().inspectImage({name: 'moby/buildkit:latest@sha256:86c0ad9d1137c186e9d455912167df20e530bdf7f7c19de802e892bb8ca16552'});
const expectedImage = <Record<string, Image>>JSON.parse(fs.readFileSync(path.join(fixturesDir, 'imagetools-02.json'), {encoding: 'utf-8'}).trim());
expect(image).toEqual(expectedImage);
});
@@ -43,12 +43,12 @@ maybe('inspectImage', () => {
maybe('inspectManifest', () => {
it('inspect descriptor', async () => {
const manifest = await new ImageTools().inspectManifest('moby/buildkit:latest@sha256:dccc69dd895968c4f21aa9e43e715f25f0cedfce4b17f1014c88c307928e22fc');
const manifest = await new ImageTools().inspectManifest({name: 'moby/buildkit:latest@sha256:dccc69dd895968c4f21aa9e43e715f25f0cedfce4b17f1014c88c307928e22fc'});
const expectedManifest = <Descriptor>JSON.parse(fs.readFileSync(path.join(fixturesDir, 'imagetools-03.json'), {encoding: 'utf-8'}).trim());
expect(manifest).toEqual(expectedManifest);
});
it('inspect index', async () => {
const manifest = await new ImageTools().inspectManifest('moby/buildkit:latest@sha256:79cc6476ab1a3371c9afd8b44e7c55610057c43e18d9b39b68e2b0c2475cc1b6');
const manifest = await new ImageTools().inspectManifest({name: 'moby/buildkit:latest@sha256:79cc6476ab1a3371c9afd8b44e7c55610057c43e18d9b39b68e2b0c2475cc1b6'});
const expectedManifest = <ImageToolsManifest>JSON.parse(fs.readFileSync(path.join(fixturesDir, 'imagetools-04.json'), {encoding: 'utf-8'}).trim());
expect(manifest).toEqual(expectedManifest);
});
@@ -56,17 +56,17 @@ maybe('inspectManifest', () => {
maybe('attestationDescriptors', () => {
it('returns buildkit attestations descriptors', async () => {
const attestations = await new ImageTools().attestationDescriptors('moby/buildkit:latest@sha256:79cc6476ab1a3371c9afd8b44e7c55610057c43e18d9b39b68e2b0c2475cc1b6');
const attestations = await new ImageTools().attestationDescriptors({name: 'moby/buildkit:latest@sha256:79cc6476ab1a3371c9afd8b44e7c55610057c43e18d9b39b68e2b0c2475cc1b6'});
const expectedAttestations = <Array<Descriptor>>JSON.parse(fs.readFileSync(path.join(fixturesDir, 'imagetools-05.json'), {encoding: 'utf-8'}).trim());
expect(attestations).toEqual(expectedAttestations);
});
it('returns buildkit attestations descriptors for linux/amd64', async () => {
const attestations = await new ImageTools().attestationDescriptors('moby/buildkit:latest@sha256:79cc6476ab1a3371c9afd8b44e7c55610057c43e18d9b39b68e2b0c2475cc1b6', {os: 'linux', architecture: 'amd64'});
const attestations = await new ImageTools().attestationDescriptors({name: 'moby/buildkit:latest@sha256:79cc6476ab1a3371c9afd8b44e7c55610057c43e18d9b39b68e2b0c2475cc1b6', platform: {os: 'linux', architecture: 'amd64'}});
const expectedAttestations = <Array<Descriptor>>JSON.parse(fs.readFileSync(path.join(fixturesDir, 'imagetools-06.json'), {encoding: 'utf-8'}).trim());
expect(attestations).toEqual(expectedAttestations);
});
it('returns buildkit attestations descriptors for linux/arm/v7', async () => {
const attestations = await new ImageTools().attestationDescriptors('moby/buildkit:latest@sha256:79cc6476ab1a3371c9afd8b44e7c55610057c43e18d9b39b68e2b0c2475cc1b6', {os: 'linux', architecture: 'arm', variant: 'v7'});
const attestations = await new ImageTools().attestationDescriptors({name: 'moby/buildkit:latest@sha256:79cc6476ab1a3371c9afd8b44e7c55610057c43e18d9b39b68e2b0c2475cc1b6', platform: {os: 'linux', architecture: 'arm', variant: 'v7'}});
const expectedAttestations = <Array<Descriptor>>JSON.parse(fs.readFileSync(path.join(fixturesDir, 'imagetools-07.json'), {encoding: 'utf-8'}).trim());
expect(attestations).toEqual(expectedAttestations);
});
@@ -74,7 +74,7 @@ maybe('attestationDescriptors', () => {
maybe('attestationDigests', () => {
it('returns buildkit attestations digests', async () => {
const digests = await new ImageTools().attestationDigests('moby/buildkit:latest@sha256:79cc6476ab1a3371c9afd8b44e7c55610057c43e18d9b39b68e2b0c2475cc1b6');
const digests = await new ImageTools().attestationDigests({name: 'moby/buildkit:latest@sha256:79cc6476ab1a3371c9afd8b44e7c55610057c43e18d9b39b68e2b0c2475cc1b6'});
// prettier-ignore
expect(digests).toEqual([
'sha256:2ba4ad6eae1efcafee73a971953093c7c32b6938f2f9fd4998c8bf4d0fbe76f2',
@@ -86,11 +86,22 @@ maybe('attestationDigests', () => {
]);
});
it('returns buildkit attestations digests for linux/amd64', async () => {
const digests = await new ImageTools().attestationDigests('moby/buildkit:latest@sha256:79cc6476ab1a3371c9afd8b44e7c55610057c43e18d9b39b68e2b0c2475cc1b6', {os: 'linux', architecture: 'amd64'});
const digests = await new ImageTools().attestationDigests({name: 'moby/buildkit:latest@sha256:79cc6476ab1a3371c9afd8b44e7c55610057c43e18d9b39b68e2b0c2475cc1b6', platform: {os: 'linux', architecture: 'amd64'}});
expect(digests).toEqual(['sha256:2ba4ad6eae1efcafee73a971953093c7c32b6938f2f9fd4998c8bf4d0fbe76f2']);
});
it('returns buildkit attestations digests for linux/arm/v7', async () => {
const digests = await new ImageTools().attestationDigests('moby/buildkit:latest@sha256:79cc6476ab1a3371c9afd8b44e7c55610057c43e18d9b39b68e2b0c2475cc1b6', {os: 'linux', architecture: 'arm', variant: 'v7'});
const digests = await new ImageTools().attestationDigests({name: 'moby/buildkit:latest@sha256:79cc6476ab1a3371c9afd8b44e7c55610057c43e18d9b39b68e2b0c2475cc1b6', platform: {os: 'linux', architecture: 'arm', variant: 'v7'}});
expect(digests).toEqual(['sha256:0709528fae1747ce17638ad2978ee7936b38a294136eaadaf692e415f64b1e03']);
});
});
maybe('create', () => {
it('skips create command execution when skipExec is set', async () => {
const result = await new ImageTools().create({
sources: ['sha256:0709528fae1747ce17638ad2978ee7936b38a294136eaadaf692e415f64b1e03'],
tags: ['docker.io/user/app', 'docker.io/user/app2'],
skipExec: true
});
expect(result).toBeUndefined();
});
});

View File

@@ -0,0 +1,301 @@
/**
* Copyright 2026 actions-toolkit authors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import {afterEach, beforeEach, describe, expect, it, vi} from 'vitest';
import fs from 'fs';
import os from 'os';
import path from 'path';
import * as rimraf from 'rimraf';
import {Buildx} from '../../src/buildx/buildx.js';
import {ImageTools} from '../../src/buildx/imagetools.js';
import {Context} from '../../src/context.js';
import {Exec} from '../../src/exec.js';
const tmpDir = fs.mkdtempSync(path.join(process.env.TEMP || os.tmpdir(), 'buildx-imagetools-'));
const metadataFile = path.join(tmpDir, 'imagetools-metadata.json');
vi.spyOn(Context, 'tmpDir').mockImplementation((): string => {
fs.mkdirSync(tmpDir, {recursive: true});
return tmpDir;
});
vi.spyOn(Context, 'tmpName').mockImplementation((): string => {
return metadataFile;
});
afterEach(() => {
vi.useRealTimers();
vi.clearAllMocks();
rimraf.sync(tmpDir);
});
beforeEach(() => {
vi.useRealTimers();
fs.mkdirSync(tmpDir, {recursive: true});
});
describe('inspectManifest', () => {
it('retries transient manifest unknown errors when requested', async () => {
vi.useFakeTimers();
const getCommand = vi.fn().mockResolvedValue({
command: 'docker',
args: ['buildx', 'imagetools', 'inspect']
});
const buildx = {getCommand} as unknown as Buildx;
const execSpy = vi
.spyOn(Exec, 'getExecOutput')
.mockResolvedValueOnce({
exitCode: 1,
stdout: '',
stderr: 'ERROR: MANIFEST_UNKNOWN: manifest unknown'
})
.mockResolvedValueOnce({
exitCode: 0,
stdout: JSON.stringify({
schemaVersion: 2,
mediaType: 'application/vnd.oci.image.index.v1+json',
manifests: []
}),
stderr: ''
});
const inspectPromise = new ImageTools({buildx}).inspectManifest({
name: 'docker.io/library/alpine:latest',
retryOnManifestUnknown: true,
retryLimit: 2
});
await vi.runAllTimersAsync();
expect(await inspectPromise).toEqual({
schemaVersion: 2,
mediaType: 'application/vnd.oci.image.index.v1+json',
manifests: []
});
expect(getCommand).toHaveBeenCalledWith(['imagetools', 'inspect', 'docker.io/library/alpine:latest', '--format', '{{json .Manifest}}']);
expect(execSpy).toHaveBeenCalledTimes(2);
});
it('does not retry non-manifest errors', async () => {
const getCommand = vi.fn().mockResolvedValue({
command: 'docker',
args: ['buildx', 'imagetools', 'inspect']
});
const buildx = {getCommand} as unknown as Buildx;
const execSpy = vi.spyOn(Exec, 'getExecOutput').mockResolvedValue({
exitCode: 1,
stdout: '',
stderr: 'ERROR: unauthorized'
});
const result = await new ImageTools({buildx})
.inspectManifest({
name: 'docker.io/library/alpine:latest',
retryOnManifestUnknown: true
})
.then(
value => ({value, error: undefined}),
error => ({value: undefined, error: error as Error})
);
expect(result.value).toBeUndefined();
expect(result.error).toBeInstanceOf(Error);
expect(result.error?.message).toContain('ERROR: unauthorized');
expect(execSpy).toHaveBeenCalledTimes(1);
});
});
describe('inspectImage', () => {
it('retries transient manifest unknown errors when requested', async () => {
vi.useFakeTimers();
const getCommand = vi.fn().mockResolvedValue({
command: 'docker',
args: ['buildx', 'imagetools', 'inspect']
});
const buildx = {getCommand} as unknown as Buildx;
const execSpy = vi
.spyOn(Exec, 'getExecOutput')
.mockResolvedValueOnce({
exitCode: 1,
stdout: '',
stderr: 'ERROR: MANIFEST_UNKNOWN: manifest unknown'
})
.mockResolvedValueOnce({
exitCode: 0,
stdout: JSON.stringify({
config: {
digest: 'sha256:test'
}
}),
stderr: ''
});
const inspectPromise = new ImageTools({buildx}).inspectImage({
name: 'docker.io/library/alpine:latest',
retryOnManifestUnknown: true,
retryLimit: 2
});
await vi.runAllTimersAsync();
expect(await inspectPromise).toEqual({
config: {
digest: 'sha256:test'
}
});
expect(getCommand).toHaveBeenCalledWith(['imagetools', 'inspect', 'docker.io/library/alpine:latest', '--format', '{{json .Image}}']);
expect(execSpy).toHaveBeenCalledTimes(2);
});
});
describe('create', () => {
it('parses metadata and supports cwd sources', async () => {
const getCommand = vi.fn().mockResolvedValue({
command: 'docker',
args: ['buildx', 'imagetools', 'create']
});
const buildx = {getCommand} as unknown as Buildx;
fs.writeFileSync(
metadataFile,
JSON.stringify({
'containerimage.descriptor': {
mediaType: 'application/vnd.oci.image.index.v1+json',
digest: 'sha256:19ffeab6f8bc9293ac2c3fdf94ebe28396254c993aea0b5a542cfb02e0883fa3',
size: 4654
},
'image.name': 'docker.io/user/app,docker.io/user/app2'
})
);
const execSpy = vi.spyOn(Exec, 'getExecOutput').mockResolvedValue({
exitCode: 0,
stdout: '',
stderr: ''
});
const result = await new ImageTools({buildx}).create({
sources: ['cwd://descriptor.json', 'docker.io/library/alpine:latest'],
tags: ['docker.io/user/app:latest'],
silent: true
});
expect(getCommand).toHaveBeenCalledWith(['imagetools', 'create', '--tag', 'docker.io/user/app:latest', '--metadata-file', metadataFile, '--file', 'descriptor.json', 'docker.io/library/alpine:latest']);
expect(execSpy).toHaveBeenCalledWith('docker', ['buildx', 'imagetools', 'create'], {
ignoreReturnCode: true,
silent: true
});
expect(result).toEqual({
digest: 'sha256:19ffeab6f8bc9293ac2c3fdf94ebe28396254c993aea0b5a542cfb02e0883fa3',
descriptor: {
mediaType: 'application/vnd.oci.image.index.v1+json',
digest: 'sha256:19ffeab6f8bc9293ac2c3fdf94ebe28396254c993aea0b5a542cfb02e0883fa3',
size: 4654
},
imageNames: ['docker.io/user/app', 'docker.io/user/app2']
});
});
it('does not parse metadata in dry-run mode', async () => {
const getCommand = vi.fn().mockResolvedValue({
command: 'docker',
args: ['buildx', 'imagetools', 'create']
});
const buildx = {getCommand} as unknown as Buildx;
const execSpy = vi.spyOn(Exec, 'getExecOutput').mockResolvedValue({
exitCode: 0,
stdout: '',
stderr: ''
});
const result = await new ImageTools({buildx}).create({
sources: ['docker.io/library/alpine:latest'],
dryRun: true,
silent: true
});
expect(getCommand).toHaveBeenCalledWith(['imagetools', 'create', '--dry-run', 'docker.io/library/alpine:latest']);
expect(execSpy).toHaveBeenCalledWith('docker', ['buildx', 'imagetools', 'create'], {
ignoreReturnCode: true,
silent: true
});
expect(result).toBeUndefined();
});
it('passes annotations to imagetools create', async () => {
const getCommand = vi.fn().mockResolvedValue({
command: 'docker',
args: ['buildx', 'imagetools', 'create']
});
const buildx = {getCommand} as unknown as Buildx;
const execSpy = vi.spyOn(Exec, 'getExecOutput').mockResolvedValue({
exitCode: 0,
stdout: '',
stderr: ''
});
const result = await new ImageTools({buildx}).create({
sources: ['docker.io/library/alpine:latest'],
annotations: ['index:org.opencontainers.image.title=Alpine', 'manifest-descriptor:org.opencontainers.image.description=Base image'],
silent: true
});
expect(getCommand).toHaveBeenCalledWith([
'imagetools',
'create',
'--annotation',
'index:org.opencontainers.image.title=Alpine',
'--annotation',
'manifest-descriptor:org.opencontainers.image.description=Base image',
'--metadata-file',
metadataFile,
'docker.io/library/alpine:latest'
]);
expect(execSpy).toHaveBeenCalledWith('docker', ['buildx', 'imagetools', 'create'], {
ignoreReturnCode: true,
silent: true
});
expect(result).toBeUndefined();
});
it('skips command execution when skipExec is enabled', async () => {
const getCommand = vi.fn().mockResolvedValue({
command: 'docker',
args: ['buildx', 'imagetools', 'create']
});
const buildx = {getCommand} as unknown as Buildx;
const execSpy = vi.spyOn(Exec, 'getExecOutput').mockResolvedValue({
exitCode: 0,
stdout: '',
stderr: ''
});
const result = await new ImageTools({buildx}).create({
sources: ['docker.io/library/alpine:latest'],
skipExec: true
});
expect(getCommand).toHaveBeenCalledWith(['imagetools', 'create', '--metadata-file', metadataFile, 'docker.io/library/alpine:latest']);
expect(execSpy).not.toHaveBeenCalled();
expect(result).toBeUndefined();
});
});

View File

@@ -14,10 +14,10 @@
* limitations under the License.
*/
import {describe, expect, test} from '@jest/globals';
import {describe, expect, test} from 'vitest';
import * as fs from 'fs';
import {Install} from '../../src/buildx/install';
import {Install} from '../../src/buildx/install.js';
const maybe = !process.env.GITHUB_ACTIONS || (process.env.GITHUB_ACTIONS === 'true' && process.env.ImageOS && process.env.ImageOS.startsWith('ubuntu')) ? describe : describe.skip;
@@ -29,7 +29,12 @@ maybe('download', () => {
const install = new Install({
standalone: true
});
const toolPath = await install.download(version);
const toolPath = await install.download({
version: version,
verifySignature: true,
ghaNoCache: true,
disableHtc: true
});
if (!fs.existsSync(toolPath)) {
throw new Error('toolPath does not exist');
}

View File

@@ -14,14 +14,15 @@
* limitations under the License.
*/
import {describe, expect, it, jest, test, afterEach} from '@jest/globals';
import {describe, expect, it, test, afterEach} from 'vitest';
import fs from 'fs';
import os from 'os';
import path from 'path';
import * as rimraf from 'rimraf';
import osm = require('os');
import {Install} from '../../src/buildx/install';
import {mockArch, mockPlatform} from '../.helpers/os.js';
import {Install} from '../../src/buildx/install.js';
const tmpDir = fs.mkdtempSync(path.join(process.env.TEMP || os.tmpdir(), 'buildx-install-'));
@@ -36,9 +37,9 @@ describe('download', () => {
['v0.10.5', true],
['latest', true]
])(
'acquires %p of buildx (standalone: %p)', async (version, standalone) => {
'acquires %o of buildx (standalone: %o)', async (version, standalone) => {
const install = new Install({standalone: standalone});
const toolPath = await install.download(version);
const toolPath = await install.download({version});
expect(fs.existsSync(toolPath)).toBe(true);
let buildxBin: string;
if (standalone) {
@@ -55,9 +56,9 @@ describe('download', () => {
['v0.9.0'],
['v0.10.5'],
])(
'acquires %p of buildx with cache', async (version) => {
'acquires %o of buildx with cache', async (version) => {
const install = new Install({standalone: false});
const toolPath = await install.download(version);
const toolPath = await install.download({version});
expect(fs.existsSync(toolPath)).toBe(true);
}, 100000);
@@ -66,9 +67,9 @@ describe('download', () => {
['v0.11.2'],
['v0.12.0'],
])(
'acquires %p of buildx without cache', async (version) => {
'acquires %o of buildx without cache', async (version) => {
const install = new Install({standalone: false});
const toolPath = await install.download(version, true);
const toolPath = await install.download({version: version, ghaNoCache: true});
expect(fs.existsSync(toolPath)).toBe(true);
}, 100000);
@@ -85,10 +86,10 @@ describe('download', () => {
['linux', 's390x'],
])(
'acquires buildx for %s/%s', async (os, arch) => {
jest.spyOn(osm, 'platform').mockImplementation(() => os as NodeJS.Platform);
jest.spyOn(osm, 'arch').mockImplementation(() => arch);
mockPlatform(os as NodeJS.Platform);
mockArch(arch);
const install = new Install();
const buildxBin = await install.download('latest');
const buildxBin = await install.download({version: 'latest'});
expect(fs.existsSync(buildxBin)).toBe(true);
}, 100000);
});

View File

@@ -14,13 +14,13 @@
* limitations under the License.
*/
import {describe, expect, it} from '@jest/globals';
import {describe, expect, it} from 'vitest';
import fs from 'fs';
import os from 'os';
import path from 'path';
import {Cache} from '../src/cache';
import {Util} from '../src/util';
import {Cache} from '../src/cache.js';
import {Util} from '../src/util.js';
const fixturesDir = path.join(__dirname, '.fixtures');
const tmpDir = fs.mkdtempSync(path.join(process.env.TEMP || os.tmpdir(), 'cache-itg-'));

View File

@@ -14,27 +14,27 @@
* limitations under the License.
*/
import {describe, expect, it, jest, test, afterEach} from '@jest/globals';
import {describe, expect, it, vi, test, afterEach} from 'vitest';
import fs from 'fs';
import os from 'os';
import path from 'path';
import * as rimraf from 'rimraf';
import * as semver from 'semver';
import {Context} from '../../src/context';
import {Exec} from '../../src/exec';
import {Context} from '../../src/context.js';
import {Exec} from '../../src/exec.js';
import {Compose} from '../../src/compose/compose';
import {Compose} from '../../src/compose/compose.js';
const tmpDir = fs.mkdtempSync(path.join(process.env.TEMP || os.tmpdir(), 'compose-compose-'));
const tmpName = path.join(tmpDir, '.tmpname-jest');
const tmpName = path.join(tmpDir, '.tmpname-vi');
jest.spyOn(Context, 'tmpDir').mockImplementation((): string => {
vi.spyOn(Context, 'tmpDir').mockImplementation((): string => {
fs.mkdirSync(tmpDir, {recursive: true});
return tmpDir;
});
jest.spyOn(Context, 'tmpName').mockImplementation((): string => {
vi.spyOn(Context, 'tmpName').mockImplementation((): string => {
return tmpName;
});
@@ -44,7 +44,7 @@ afterEach(() => {
describe('isAvailable', () => {
it('docker cli', async () => {
const execSpy = jest.spyOn(Exec, 'getExecOutput');
const execSpy = vi.spyOn(Exec, 'getExecOutput');
const compose = new Compose({
standalone: false
});
@@ -55,7 +55,7 @@ describe('isAvailable', () => {
});
});
it('standalone', async () => {
const execSpy = jest.spyOn(Exec, 'getExecOutput');
const execSpy = vi.spyOn(Exec, 'getExecOutput');
const compose = new Compose({
standalone: true
});
@@ -69,7 +69,7 @@ describe('isAvailable', () => {
describe('printVersion', () => {
it('docker cli', async () => {
const execSpy = jest.spyOn(Exec, 'exec');
const execSpy = vi.spyOn(Exec, 'exec');
const compose = new Compose({
standalone: false
});
@@ -79,7 +79,7 @@ describe('printVersion', () => {
});
});
it('standalone', async () => {
const execSpy = jest.spyOn(Exec, 'exec');
const execSpy = vi.spyOn(Exec, 'exec');
const compose = new Compose({
standalone: true
});
@@ -101,7 +101,7 @@ describe('parseVersion', () => {
// prettier-ignore
test.each([
['Docker Compose version v2.31.0', '2.31.0'],
])('given %p', async (stdout, expected) => {
])('given %o', async (stdout, expected) => {
expect(Compose.parseVersion(stdout)).toEqual(expected);
});
});

View File

@@ -14,10 +14,10 @@
* limitations under the License.
*/
import {describe, expect, test} from '@jest/globals';
import {describe, expect, test} from 'vitest';
import * as fs from 'fs';
import {Install} from '../../src/compose/install';
import {Install} from '../../src/compose/install.js';
const maybe = !process.env.GITHUB_ACTIONS || (process.env.GITHUB_ACTIONS === 'true' && process.env.ImageOS && process.env.ImageOS.startsWith('ubuntu')) ? describe : describe.skip;

View File

@@ -14,14 +14,15 @@
* limitations under the License.
*/
import {describe, expect, it, jest, test, afterEach} from '@jest/globals';
import {describe, expect, it, test, afterEach} from 'vitest';
import fs from 'fs';
import os from 'os';
import path from 'path';
import * as rimraf from 'rimraf';
import osm = require('os');
import {Install} from '../../src/compose/install';
import {mockArch, mockPlatform} from '../.helpers/os.js';
import {Install} from '../../src/compose/install.js';
const tmpDir = fs.mkdtempSync(path.join(process.env.TEMP || os.tmpdir(), 'compose-install-'));
@@ -36,7 +37,7 @@ describe('download', () => {
['v2.32.4', true],
['latest', true]
])(
'acquires %p of compose (standalone: %p)', async (version, standalone) => {
'acquires %o of compose (standalone: %o)', async (version, standalone) => {
const install = new Install({standalone: standalone});
const toolPath = await install.download(version);
expect(fs.existsSync(toolPath)).toBe(true);
@@ -55,7 +56,7 @@ describe('download', () => {
['v2.31.0'],
['v2.32.4'],
])(
'acquires %p of compose with cache', async (version) => {
'acquires %o of compose with cache', async (version) => {
const install = new Install({standalone: false});
const toolPath = await install.download(version);
expect(fs.existsSync(toolPath)).toBe(true);
@@ -66,7 +67,7 @@ describe('download', () => {
['v2.27.1'],
['v2.28.0'],
])(
'acquires %p of compose without cache', async (version) => {
'acquires %o of compose without cache', async (version) => {
const install = new Install({standalone: false});
const toolPath = await install.download(version, true);
expect(fs.existsSync(toolPath)).toBe(true);
@@ -85,8 +86,8 @@ describe('download', () => {
['linux', 's390x'],
])(
'acquires compose for %s/%s', async (os, arch) => {
jest.spyOn(osm, 'platform').mockImplementation(() => os as NodeJS.Platform);
jest.spyOn(osm, 'arch').mockImplementation(() => arch);
mockPlatform(os as NodeJS.Platform);
mockArch(arch);
const install = new Install();
const composeBin = await install.download('latest');
expect(fs.existsSync(composeBin)).toBe(true);

View File

@@ -14,66 +14,44 @@
* limitations under the License.
*/
import {describe, expect, jest, it, afterEach, beforeEach, test} from '@jest/globals';
import {describe, expect, it, afterEach} from 'vitest';
import fs from 'fs';
import os from 'os';
import path from 'path';
import * as rimraf from 'rimraf';
import {Context} from '../src/context';
import {Context} from '../src/context.js';
const tmpDir = fs.mkdtempSync(path.join(process.env.TEMP || os.tmpdir(), 'context-'));
const tmpName = path.join(tmpDir, '.tmpname-jest');
jest.spyOn(Context, 'tmpDir').mockImplementation((): string => {
fs.mkdirSync(tmpDir, {recursive: true});
return tmpDir;
});
jest.spyOn(Context, 'tmpName').mockImplementation((): string => {
return tmpName;
});
afterEach(() => {
rimraf.sync(tmpDir);
fs.mkdirSync(tmpDir, {recursive: true});
});
describe('gitRef', () => {
it('returns refs/heads/master', async () => {
expect(Context.gitRef()).toEqual('refs/heads/master');
describe('tmpDir', () => {
it('returns an existing directory and keeps it stable', () => {
const dir = Context.tmpDir();
expect(fs.existsSync(dir)).toBe(true);
expect(fs.statSync(dir).isDirectory()).toBe(true);
expect(Context.tmpDir()).toEqual(dir);
});
});
describe('parseGitRef', () => {
const originalEnv = process.env;
beforeEach(() => {
jest.resetModules();
process.env = {
...originalEnv,
DOCKER_GIT_CONTEXT_PR_HEAD_REF: ''
};
describe('tmpName', () => {
it('returns a path for the provided tmpdir and template', () => {
const name = Context.tmpName({
tmpdir: tmpDir,
template: '.tmpname-XXXXXX'
});
expect(path.dirname(name)).toEqual(tmpDir);
expect(path.basename(name)).toMatch(/^\.tmpname-/);
expect(fs.existsSync(name)).toBe(false);
});
afterEach(() => {
process.env = originalEnv;
});
// prettier-ignore
test.each([
['refs/heads/master', '860c1904a1ce19322e91ac35af1ab07466440c37', false, '860c1904a1ce19322e91ac35af1ab07466440c37'],
['master', '860c1904a1ce19322e91ac35af1ab07466440c37', false, '860c1904a1ce19322e91ac35af1ab07466440c37'],
['refs/pull/15/merge', '860c1904a1ce19322e91ac35af1ab07466440c37', false, 'refs/pull/15/merge'],
['refs/heads/master', '', false, 'refs/heads/master'],
['master', '', false, 'master'],
['refs/tags/v1.0.0', '', false, 'refs/tags/v1.0.0'],
['refs/pull/15/merge', '', false, 'refs/pull/15/merge'],
['refs/pull/15/merge', '', true, 'refs/pull/15/head'],
])('given %p and %p, should return %p', async (ref: string, sha: string, prHeadRef: boolean, expected: string) => {
process.env.DOCKER_DEFAULT_GIT_CONTEXT_PR_HEAD_REF = prHeadRef ? 'true' : '';
expect(Context.parseGitRef(ref, sha)).toEqual(expected);
});
});
describe('gitContext', () => {
it('returns refs/heads/master', async () => {
expect(Context.gitContext()).toEqual('https://github.com/docker/actions-toolkit.git#refs/heads/master');
it('returns different paths on consecutive calls', () => {
const first = Context.tmpName({tmpdir: tmpDir, template: '.tmpname-XXXXXX'});
const second = Context.tmpName({tmpdir: tmpDir, template: '.tmpname-XXXXXX'});
expect(first).not.toEqual(second);
});
});

View File

@@ -14,19 +14,19 @@
* limitations under the License.
*/
import {describe, expect, it, jest, test} from '@jest/globals';
import {describe, expect, it, vi, test} from 'vitest';
import fs from 'fs';
import path from 'path';
import * as semver from 'semver';
import {Exec} from '../../src/exec';
import {Cosign} from '../../src/cosign/cosign';
import {Exec} from '../../src/exec.js';
import {Cosign} from '../../src/cosign/cosign.js';
const fixturesDir = path.join(__dirname, '..', '.fixtures');
describe('isAvailable', () => {
it('checks Cosign is available', async () => {
const execSpy = jest.spyOn(Exec, 'getExecOutput');
const execSpy = vi.spyOn(Exec, 'getExecOutput');
const cosign = new Cosign();
await cosign.isAvailable();
expect(execSpy).toHaveBeenCalledWith(`cosign`, [], {
@@ -38,7 +38,7 @@ describe('isAvailable', () => {
describe('printVersion', () => {
it('prints Cosign version', async () => {
const execSpy = jest.spyOn(Exec, 'exec');
const execSpy = vi.spyOn(Exec, 'exec');
const cosign = new Cosign();
await cosign.printVersion();
expect(execSpy).toHaveBeenCalledWith(`cosign`, ['version', '--json'], {
@@ -59,7 +59,7 @@ describe('versionSatisfies', () => {
['v0.4.1', '>=0.3.2', true],
['v0.8.0', '>0.6.0', true],
['v0.8.0', '<0.3.0', false]
])('given %p', async (version, range, expected) => {
])('given %o', async (version, range, expected) => {
const cosign = new Cosign();
expect(await cosign.versionSatisfies(range, version)).toBe(expected);
});
@@ -71,7 +71,7 @@ describe('parseCommandOutput', () => {
[path.join(fixturesDir, 'cosign', 'sign-output1.txt')],
[path.join(fixturesDir, 'cosign', 'sign-output2.txt')],
[path.join(fixturesDir, 'cosign', 'sign-output3.txt')],
])('parsing %p', async (fixturePath: string) => {
])('parsing %o', async (fixturePath: string) => {
const signResult = Cosign.parseCommandOutput(fs.readFileSync(fixturePath, 'utf-8'));
expect(signResult).toBeDefined();
expect(signResult.bundle).toBeDefined();
@@ -80,7 +80,7 @@ describe('parseCommandOutput', () => {
// prettier-ignore
test.each([
[path.join(fixturesDir, 'cosign', 'verify-output-err1.txt')],
])('parsing %p', async (fixturePath: string) => {
])('parsing %o', async (fixturePath: string) => {
const signResult = Cosign.parseCommandOutput(fs.readFileSync(fixturePath, 'utf-8'));
expect(signResult).toBeDefined();
expect(signResult.bundle).toBeUndefined();

View File

@@ -14,10 +14,10 @@
* limitations under the License.
*/
import {describe, expect, it, test} from '@jest/globals';
import {describe, expect, it, test} from 'vitest';
import * as fs from 'fs';
import {Install} from '../../src/cosign/install';
import {Install} from '../../src/cosign/install.js';
const maybe = !process.env.GITHUB_ACTIONS || (process.env.GITHUB_ACTIONS === 'true' && process.env.ImageOS && process.env.ImageOS.startsWith('ubuntu')) ? describe : describe.skip;

View File

@@ -14,14 +14,15 @@
* limitations under the License.
*/
import {describe, expect, it, jest, test, afterEach} from '@jest/globals';
import {describe, expect, it, test, afterEach} from 'vitest';
import fs from 'fs';
import os from 'os';
import path from 'path';
import * as rimraf from 'rimraf';
import osm = require('os');
import {Install} from '../../src/cosign/install';
import {mockArch, mockPlatform} from '../.helpers/os.js';
import {Install} from '../../src/cosign/install.js';
const tmpDir = fs.mkdtempSync(path.join(process.env.TEMP || os.tmpdir(), 'cosign-install-'));
@@ -36,7 +37,7 @@ describe('download', () => {
['v3.0.1'],
['latest']
])(
'acquires %p of cosign', async (version) => {
'acquires %o of cosign', async (version) => {
const install = new Install();
const toolPath = await install.download({version});
expect(fs.existsSync(toolPath)).toBe(true);
@@ -50,7 +51,7 @@ describe('download', () => {
['v2.6.1'],
['v3.0.1'],
])(
'acquires %p of cosign with cache', async (version) => {
'acquires %o of cosign with cache', async (version) => {
const install = new Install();
const toolPath = await install.download({version});
expect(fs.existsSync(toolPath)).toBe(true);
@@ -61,7 +62,7 @@ describe('download', () => {
['v2.5.3'],
['v2.6.0'],
])(
'acquires %p of cosign without cache', async (version) => {
'acquires %o of cosign without cache', async (version) => {
const install = new Install();
const toolPath = await install.download({
version: version,
@@ -80,8 +81,8 @@ describe('download', () => {
['linux', 'arm64']
])(
'acquires undock for %s/%s', async (os, arch) => {
jest.spyOn(osm, 'platform').mockImplementation(() => os as NodeJS.Platform);
jest.spyOn(osm, 'arch').mockImplementation(() => arch);
mockPlatform(os as NodeJS.Platform);
mockArch(arch);
const install = new Install();
const cosignBin = await install.download({
version: 'latest'

View File

@@ -14,9 +14,9 @@
* limitations under the License.
*/
import {describe, expect, it, test} from '@jest/globals';
import {describe, expect, it, test} from 'vitest';
import {Docker} from '../../src/docker/docker';
import {Docker} from '../../src/docker/docker.js';
const maybe = !process.env.GITHUB_ACTIONS || (process.env.GITHUB_ACTIONS === 'true' && process.env.ImageOS && process.env.ImageOS.startsWith('ubuntu')) ? describe : describe.skip;
@@ -55,7 +55,7 @@ maybe('pull', () => {
if (err === undefined) {
throw new Error(`Expected no error, but got: ${e.message}`);
}
// eslint-disable-next-line jest/no-conditional-expect
// eslint-disable-next-line vitest/no-conditional-expect
expect(e.message).toContain(err);
}
}, 600000);

View File

@@ -14,17 +14,26 @@
* limitations under the License.
*/
import {afterEach, beforeEach, describe, expect, it, jest} from '@jest/globals';
import {afterEach, beforeEach, describe, expect, it, vi} from 'vitest';
import fs from 'fs';
import os from 'os';
import path from 'path';
import * as io from '@actions/io';
import osm = require('os');
import * as rimraf from 'rimraf';
import {Docker} from '../../src/docker/docker';
import {mockHomedir} from '../.helpers/os.js';
import {ConfigFile} from '../../src/types/docker/docker';
import {Docker} from '../../src/docker/docker.js';
import {ConfigFile} from '../../src/types/docker/docker.js';
vi.mock('@actions/io', async () => {
const actual = await vi.importActual<typeof import('@actions/io')>('@actions/io');
return {
...actual,
which: vi.fn()
};
});
const fixturesDir = path.join(__dirname, '..', '.fixtures');
const tmpDir = fs.mkdtempSync(path.join(process.env.TEMP || os.tmpdir(), 'docker-docker-'));
@@ -36,7 +45,7 @@ afterEach(function () {
describe('configDir', () => {
const originalEnv = process.env;
beforeEach(() => {
jest.resetModules();
vi.resetModules();
process.env = {
...originalEnv,
DOCKER_CONFIG: '/var/docker/config'
@@ -47,7 +56,7 @@ describe('configDir', () => {
});
it('returns default', async () => {
process.env.DOCKER_CONFIG = '';
jest.spyOn(osm, 'homedir').mockImplementation(() => path.join('/tmp', 'home'));
mockHomedir(path.join('/tmp', 'home'));
expect(Docker.configDir).toEqual(path.join('/tmp', 'home', '.docker'));
});
it('returns from env', async () => {
@@ -58,7 +67,7 @@ describe('configDir', () => {
describe('configFile', () => {
const originalEnv = process.env;
beforeEach(() => {
jest.resetModules();
vi.resetModules();
if (!fs.existsSync(tmpDir)) {
fs.mkdirSync(tmpDir, {recursive: true});
}
@@ -96,7 +105,7 @@ describe('configFile', () => {
describe('isAvailable', () => {
it('cli', async () => {
const ioWhichSpy = jest.spyOn(io, 'which');
const ioWhichSpy = vi.mocked(io.which).mockResolvedValue('/usr/bin/docker');
await Docker.isAvailable();
expect(ioWhichSpy).toHaveBeenCalledTimes(1);
expect(ioWhichSpy).toHaveBeenCalledWith('docker', true);
@@ -105,7 +114,7 @@ describe('isAvailable', () => {
describe('exec', () => {
it('returns docker version', async () => {
const execSpy = jest.spyOn(Docker, 'exec');
const execSpy = vi.spyOn(Docker, 'exec');
await Docker.exec(['version'], {
ignoreReturnCode: true,
silent: true
@@ -132,7 +141,7 @@ describe('exec', () => {
describe('getExecOutput', () => {
it('returns docker version', async () => {
const execSpy = jest.spyOn(Docker, 'getExecOutput');
const execSpy = vi.spyOn(Docker, 'getExecOutput');
await Docker.getExecOutput(['version'], {
ignoreReturnCode: true,
silent: true
@@ -159,7 +168,7 @@ describe('getExecOutput', () => {
describe('context', () => {
it('call docker context show', async () => {
const execSpy = jest.spyOn(Docker, 'getExecOutput');
const execSpy = vi.spyOn(Docker, 'getExecOutput');
await Docker.context().catch(() => {
// noop
});
@@ -181,7 +190,7 @@ describe('context', () => {
describe('contextInspect', () => {
it('call docker context inspect', async () => {
const execSpy = jest.spyOn(Docker, 'getExecOutput');
const execSpy = vi.spyOn(Docker, 'getExecOutput');
await Docker.contextInspect('foo').catch(() => {
// noop
});
@@ -203,7 +212,7 @@ describe('contextInspect', () => {
describe('printVersion', () => {
it('call docker version', async () => {
const execSpy = jest.spyOn(Docker, 'exec');
const execSpy = vi.spyOn(Docker, 'exec');
await Docker.printVersion().catch(() => {
// noop
});
@@ -219,7 +228,7 @@ describe('printVersion', () => {
describe('printInfo', () => {
it('call docker info', async () => {
const execSpy = jest.spyOn(Docker, 'exec');
const execSpy = vi.spyOn(Docker, 'exec');
await Docker.printInfo().catch(() => {
// noop
});

View File

@@ -14,16 +14,16 @@
* limitations under the License.
*/
import {beforeAll, describe, test, expect} from '@jest/globals';
import {beforeAll, describe, test, expect} from 'vitest';
import fs from 'fs';
import os from 'os';
import path from 'path';
import {Install, InstallSource, InstallSourceArchive, InstallSourceImage} from '../../src/docker/install';
import {Docker} from '../../src/docker/docker';
import {Install as RegclientInstall} from '../../src/regclient/install';
import {Install as UndockInstall} from '../../src/undock/install';
import {Exec} from '../../src/exec';
import {Install, InstallSource, InstallSourceArchive, InstallSourceImage} from '../../src/docker/install.js';
import {Docker} from '../../src/docker/docker.js';
import {Install as RegclientInstall} from '../../src/regclient/install.js';
import {Install as UndockInstall} from '../../src/undock/install.js';
import {Exec} from '../../src/exec.js';
const tmpDir = () => fs.mkdtempSync(path.join(process.env.TEMP || os.tmpdir(), 'docker-install-itg-'));

View File

@@ -14,14 +14,15 @@
* limitations under the License.
*/
import {describe, expect, jest, test, beforeEach, afterEach, it} from '@jest/globals';
import {describe, expect, vi, test, beforeEach, afterEach, it} from 'vitest';
import fs from 'fs';
import os from 'os';
import path from 'path';
import * as rimraf from 'rimraf';
import osm = require('os');
import {Install, InstallSourceArchive, InstallSourceImage} from '../../src/docker/install';
import {mockArch, mockPlatform} from '../.helpers/os.js';
import {Install, InstallSourceArchive, InstallSourceImage} from '../../src/docker/install.js';
const tmpDir = fs.mkdtempSync(path.join(process.env.TEMP || os.tmpdir(), 'docker-install-'));
@@ -59,9 +60,9 @@ describe('download', () => {
[image('27.3.1'), 'linux'],
[image('27.3.1'), 'win32'],
])(
'acquires %p of docker (%s)', async (source, platformOS) => {
jest.spyOn(osm, 'platform').mockImplementation(() => platformOS as NodeJS.Platform);
jest.spyOn(osm, 'arch').mockImplementation(() => 'x64');
'acquires %o of docker (%s)', async (source, platformOS) => {
mockPlatform(platformOS as NodeJS.Platform);
mockArch('x64');
const install = new Install({
source: source,
runDir: tmpDir
@@ -102,7 +103,7 @@ describe('getRelease', () => {
describe('limaImage', () => {
const originalEnv = process.env;
beforeEach(() => {
jest.resetModules();
vi.resetModules();
process.env = {
...originalEnv,
LIMA_IMAGES: `x86_64:https://cloud-images.ubuntu.com/releases/23.10/release-20231011/ubuntu-23.10-server-cloudimg-amd64.img@sha256:f6529be56da3429a56e4f5ef202bf4958201bc63f8541e478caa6e8eb712e635

View File

@@ -14,24 +14,24 @@
* limitations under the License.
*/
import {describe, expect, jest, it} from '@jest/globals';
import {describe, expect, vi, it} from 'vitest';
import * as fs from 'fs';
import * as path from 'path';
import {DockerHub} from '../src/dockerhub';
import {RepositoryResponse, RepositoryTagsResponse} from '../src/types/dockerhub';
import {DockerHub} from '../src/dockerhub.js';
import {RepositoryResponse, RepositoryTagsResponse} from '../src/types/dockerhub.js';
import repoInfoFixture from './.fixtures/dockerhub-repoinfo.json';
import repoTagsFixture from './.fixtures/dockerhub-repotags.json';
import repoAllTagsFixture from './.fixtures/dockerhub-repoalltags.json';
import repoInfoFixture from './.fixtures/dockerhub-repoinfo.json' with {type: 'json'};
import repoTagsFixture from './.fixtures/dockerhub-repotags.json' with {type: 'json'};
import repoAllTagsFixture from './.fixtures/dockerhub-repoalltags.json' with {type: 'json'};
describe('getRepository', () => {
it('returns repo info', async () => {
jest.spyOn(DockerHub.prototype, 'getRepository').mockImplementation((): Promise<RepositoryResponse> => {
vi.spyOn(DockerHub.prototype, 'getRepository').mockImplementation((): Promise<RepositoryResponse> => {
return <Promise<RepositoryResponse>>(repoInfoFixture as unknown);
});
// eslint-disable-next-line @typescript-eslint/no-explicit-any
jest.spyOn(DockerHub as any, 'login').mockReturnValue('jwt_token');
vi.spyOn(DockerHub as any, 'login').mockReturnValue('jwt_token');
const dockerhub = await DockerHub.build({
credentials: {
username: 'foo',
@@ -50,11 +50,11 @@ describe('getRepository', () => {
describe('getRepositoryTags', () => {
it('return repo tags', async () => {
jest.spyOn(DockerHub.prototype, 'getRepositoryTags').mockImplementation((): Promise<RepositoryTagsResponse> => {
vi.spyOn(DockerHub.prototype, 'getRepositoryTags').mockImplementation((): Promise<RepositoryTagsResponse> => {
return <Promise<RepositoryTagsResponse>>(repoTagsFixture as unknown);
});
// eslint-disable-next-line @typescript-eslint/no-explicit-any
jest.spyOn(DockerHub as any, 'login').mockReturnValue('jwt_token');
vi.spyOn(DockerHub as any, 'login').mockReturnValue('jwt_token');
const dockerhub = await DockerHub.build({
credentials: {
username: 'foo',
@@ -74,11 +74,11 @@ describe('getRepositoryTags', () => {
describe('getRepositoryAllTags', () => {
it('return repo all tags', async () => {
jest.spyOn(DockerHub.prototype, 'getRepositoryAllTags').mockImplementation((): Promise<RepositoryTagsResponse> => {
vi.spyOn(DockerHub.prototype, 'getRepositoryAllTags').mockImplementation((): Promise<RepositoryTagsResponse> => {
return <Promise<RepositoryTagsResponse>>(repoAllTagsFixture as unknown);
});
// eslint-disable-next-line @typescript-eslint/no-explicit-any
jest.spyOn(DockerHub as any, 'login').mockReturnValue('jwt_token');
vi.spyOn(DockerHub as any, 'login').mockReturnValue('jwt_token');
const dockerhub = await DockerHub.build({
credentials: {
username: 'foo',

View File

@@ -14,13 +14,13 @@
* limitations under the License.
*/
import {describe, expect, it, jest} from '@jest/globals';
import {describe, expect, it, vi} from 'vitest';
import {Exec} from '../src/exec';
import {Exec} from '../src/exec.js';
describe('exec', () => {
it('returns docker version', async () => {
const execSpy = jest.spyOn(Exec, 'exec');
const execSpy = vi.spyOn(Exec, 'exec');
await Exec.exec('docker', ['version'], {
ignoreReturnCode: true,
silent: true
@@ -34,7 +34,7 @@ describe('exec', () => {
describe('getExecOutput', () => {
it('returns docker version', async () => {
const execSpy = jest.spyOn(Exec, 'getExecOutput');
const execSpy = vi.spyOn(Exec, 'getExecOutput');
await Exec.getExecOutput('docker', ['version'], {
ignoreReturnCode: true,
silent: true

View File

@@ -1,5 +1,5 @@
/**
* Copyright 2024 actions-toolkit authors
* Copyright 2026 actions-toolkit authors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -14,15 +14,12 @@
* limitations under the License.
*/
/* eslint-disable @typescript-eslint/no-require-imports */
const fs = require('fs');
import {describe, expect, it} from 'vitest';
module.exports = results => {
const allSkipped = results.testResults.every(result => result.skipped);
if (allSkipped) {
console.log('All tests were skipped!');
fs.mkdirSync('./coverage', {recursive: true});
fs.closeSync(fs.openSync('./coverage/allSkipped.txt', 'w'));
}
return results;
};
import {Git} from '../src/git.js';
describe('remoteSha', () => {
it('returns sha using github api', async () => {
expect(await Git.remoteSha('https://github.com/docker/buildx.git', 'refs/pull/648/head', process.env.GITHUB_TOKEN)).toEqual('f11797113e5a9b86bd976329c5dbb8a8bfdfadfa');
});
});

View File

@@ -14,19 +14,19 @@
* limitations under the License.
*/
import {beforeEach, describe, expect, it, jest} from '@jest/globals';
import {beforeEach, describe, expect, it, vi} from 'vitest';
import {Git} from '../src/git';
import {Exec} from '../src/exec';
import {Git} from '../src/git.js';
import {Exec} from '../src/exec.js';
import {ExecOutput} from '@actions/exec';
beforeEach(() => {
jest.restoreAllMocks();
vi.restoreAllMocks();
});
describe('context', () => {
it('returns mocked ref and sha', async () => {
jest.spyOn(Exec, 'getExecOutput').mockImplementation((cmd, args): Promise<ExecOutput> => {
vi.spyOn(Exec, 'getExecOutput').mockImplementation((cmd, args): Promise<ExecOutput> => {
const fullCmd = `${cmd} ${args?.join(' ')}`;
let result = '';
switch (fullCmd) {
@@ -54,7 +54,7 @@ describe('context', () => {
describe('isInsideWorkTree', () => {
it('have been called', async () => {
const execSpy = jest.spyOn(Exec, 'getExecOutput');
const execSpy = vi.spyOn(Exec, 'getExecOutput');
try {
await Git.isInsideWorkTree();
} catch {
@@ -71,14 +71,11 @@ describe('remoteSha', () => {
it('returns sha using git ls-remote', async () => {
expect(await Git.remoteSha('https://github.com/docker/buildx.git', 'refs/pull/648/head')).toEqual('f11797113e5a9b86bd976329c5dbb8a8bfdfadfa');
});
it('returns sha using github api', async () => {
expect(await Git.remoteSha('https://github.com/docker/buildx.git', 'refs/pull/648/head', process.env.GITHUB_TOKEN)).toEqual('f11797113e5a9b86bd976329c5dbb8a8bfdfadfa');
});
});
describe('remoteURL', () => {
it('have been called', async () => {
const execSpy = jest.spyOn(Exec, 'getExecOutput');
const execSpy = vi.spyOn(Exec, 'getExecOutput');
try {
await Git.remoteURL();
} catch {
@@ -93,7 +90,7 @@ describe('remoteURL', () => {
describe('ref', () => {
it('returns mocked ref', async () => {
jest.spyOn(Exec, 'getExecOutput').mockImplementation((cmd, args): Promise<ExecOutput> => {
vi.spyOn(Exec, 'getExecOutput').mockImplementation((cmd, args): Promise<ExecOutput> => {
const fullCmd = `${cmd} ${args?.join(' ')}`;
let result = '';
switch (fullCmd) {
@@ -110,14 +107,12 @@ describe('ref', () => {
exitCode: 0
});
});
const ref = await Git.ref();
expect(ref).toEqual('refs/heads/test');
});
it('returns mocked detached tag ref', async () => {
jest.spyOn(Exec, 'getExecOutput').mockImplementation((cmd, args): Promise<ExecOutput> => {
vi.spyOn(Exec, 'getExecOutput').mockImplementation((cmd, args): Promise<ExecOutput> => {
const fullCmd = `${cmd} ${args?.join(' ')}`;
let result = '';
switch (fullCmd) {
@@ -134,14 +129,12 @@ describe('ref', () => {
exitCode: 0
});
});
const ref = await Git.ref();
expect(ref).toEqual('refs/tags/8.0.0');
});
it('returns mocked detached tag ref (shallow clone)', async () => {
jest.spyOn(Exec, 'getExecOutput').mockImplementation((cmd, args): Promise<ExecOutput> => {
vi.spyOn(Exec, 'getExecOutput').mockImplementation((cmd, args): Promise<ExecOutput> => {
const fullCmd = `${cmd} ${args?.join(' ')}`;
let result = '';
switch (fullCmd) {
@@ -158,14 +151,12 @@ describe('ref', () => {
exitCode: 0
});
});
const ref = await Git.ref();
expect(ref).toEqual('refs/tags/8.0.0');
});
it('returns mocked detached pull request merge ref (shallow clone)', async () => {
jest.spyOn(Exec, 'getExecOutput').mockImplementation((cmd, args): Promise<ExecOutput> => {
vi.spyOn(Exec, 'getExecOutput').mockImplementation((cmd, args): Promise<ExecOutput> => {
const fullCmd = `${cmd} ${args?.join(' ')}`;
let result = '';
switch (fullCmd) {
@@ -182,14 +173,12 @@ describe('ref', () => {
exitCode: 0
});
});
const ref = await Git.ref();
expect(ref).toEqual('refs/pull/221/merge');
});
it('should throws an error when detached HEAD ref is not supported', async () => {
jest.spyOn(Exec, 'getExecOutput').mockImplementation((cmd, args): Promise<ExecOutput> => {
vi.spyOn(Exec, 'getExecOutput').mockImplementation((cmd, args): Promise<ExecOutput> => {
const fullCmd = `${cmd} ${args?.join(' ')}`;
let result = '';
switch (fullCmd) {
@@ -206,12 +195,11 @@ describe('ref', () => {
exitCode: 0
});
});
await expect(Git.ref()).rejects.toThrow('Cannot find detached HEAD ref in "wrong, HEAD, tag: 8.0.0"');
});
it('returns mocked detached branch ref', async () => {
jest.spyOn(Exec, 'getExecOutput').mockImplementation((cmd, args): Promise<ExecOutput> => {
vi.spyOn(Exec, 'getExecOutput').mockImplementation((cmd, args): Promise<ExecOutput> => {
const fullCmd = `${cmd} ${args?.join(' ')}`;
let result = '';
switch (fullCmd) {
@@ -228,14 +216,12 @@ describe('ref', () => {
exitCode: 0
});
});
const ref = await Git.ref();
expect(ref).toEqual('refs/heads/test');
});
it('returns mocked detached branch ref checked out by SHA', async () => {
jest.spyOn(Exec, 'getExecOutput').mockImplementation((cmd, args): Promise<ExecOutput> => {
vi.spyOn(Exec, 'getExecOutput').mockImplementation((cmd, args): Promise<ExecOutput> => {
const fullCmd = `${cmd} ${args?.join(' ')}`;
let result = '';
switch (fullCmd) {
@@ -252,14 +238,12 @@ describe('ref', () => {
exitCode: 0
});
});
const ref = await Git.ref();
expect(ref).toEqual('refs/heads/feature-branch');
});
it('infers ref from local branch when detached HEAD returns only "HEAD"', async () => {
jest.spyOn(Exec, 'getExecOutput').mockImplementation((cmd, args): Promise<ExecOutput> => {
vi.spyOn(Exec, 'getExecOutput').mockImplementation((cmd, args): Promise<ExecOutput> => {
const fullCmd = `${cmd} ${args?.join(' ')}`;
let result = '';
switch (fullCmd) {
@@ -279,14 +263,12 @@ describe('ref', () => {
exitCode: 0
});
});
const ref = await Git.ref();
expect(ref).toEqual('refs/heads/main');
});
it('infers ref from local branch when detached HEAD returns only "grafted, HEAD"', async () => {
jest.spyOn(Exec, 'getExecOutput').mockImplementation((cmd, args): Promise<ExecOutput> => {
vi.spyOn(Exec, 'getExecOutput').mockImplementation((cmd, args): Promise<ExecOutput> => {
const fullCmd = `${cmd} ${args?.join(' ')}`;
let result = '';
switch (fullCmd) {
@@ -306,14 +288,12 @@ describe('ref', () => {
exitCode: 0
});
});
const ref = await Git.ref();
expect(ref).toEqual('refs/heads/main');
});
it('infers ref from remote branch when no local branch contains HEAD', async () => {
jest.spyOn(Exec, 'getExecOutput').mockImplementation((cmd, args): Promise<ExecOutput> => {
vi.spyOn(Exec, 'getExecOutput').mockImplementation((cmd, args): Promise<ExecOutput> => {
const fullCmd = `${cmd} ${args?.join(' ')}`;
let result = '';
switch (fullCmd) {
@@ -336,14 +316,12 @@ describe('ref', () => {
exitCode: 0
});
});
const ref = await Git.ref();
expect(ref).toEqual('refs/heads/feature');
});
it('infers ref from tag when no branch contains HEAD', async () => {
jest.spyOn(Exec, 'getExecOutput').mockImplementation((cmd, args): Promise<ExecOutput> => {
vi.spyOn(Exec, 'getExecOutput').mockImplementation((cmd, args): Promise<ExecOutput> => {
const fullCmd = `${cmd} ${args?.join(' ')}`;
let result = '';
switch (fullCmd) {
@@ -369,14 +347,12 @@ describe('ref', () => {
exitCode: 0
});
});
const ref = await Git.ref();
expect(ref).toEqual('refs/tags/v1.0.0');
});
it('throws error when cannot infer ref from detached HEAD', async () => {
jest.spyOn(Exec, 'getExecOutput').mockImplementation((cmd, args): Promise<ExecOutput> => {
vi.spyOn(Exec, 'getExecOutput').mockImplementation((cmd, args): Promise<ExecOutput> => {
const fullCmd = `${cmd} ${args?.join(' ')}`;
let result = '';
switch (fullCmd) {
@@ -402,12 +378,11 @@ describe('ref', () => {
exitCode: 0
});
});
await expect(Git.ref()).rejects.toThrow('Cannot infer ref from detached HEAD');
});
it('handles remote ref without branch pattern when inferring from remote', async () => {
jest.spyOn(Exec, 'getExecOutput').mockImplementation((cmd, args): Promise<ExecOutput> => {
vi.spyOn(Exec, 'getExecOutput').mockImplementation((cmd, args): Promise<ExecOutput> => {
const fullCmd = `${cmd} ${args?.join(' ')}`;
let result = '';
switch (fullCmd) {
@@ -430,16 +405,14 @@ describe('ref', () => {
exitCode: 0
});
});
const ref = await Git.ref();
expect(ref).toEqual('refs/remotes/unusual-format');
});
});
describe('fullCommit', () => {
it('have been called', async () => {
const execSpy = jest.spyOn(Exec, 'getExecOutput');
const execSpy = vi.spyOn(Exec, 'getExecOutput');
try {
await Git.fullCommit();
} catch {
@@ -454,7 +427,7 @@ describe('fullCommit', () => {
describe('shortCommit', () => {
it('have been called', async () => {
const execSpy = jest.spyOn(Exec, 'getExecOutput');
const execSpy = vi.spyOn(Exec, 'getExecOutput');
try {
await Git.shortCommit();
} catch {
@@ -469,7 +442,7 @@ describe('shortCommit', () => {
describe('tag', () => {
it('have been called', async () => {
const execSpy = jest.spyOn(Exec, 'getExecOutput');
const execSpy = vi.spyOn(Exec, 'getExecOutput');
try {
await Git.tag();
} catch {
@@ -485,6 +458,6 @@ describe('tag', () => {
describe('getCommitDate', () => {
it('head', async () => {
const date = await Git.commitDate('HEAD');
await expect(date).toBeInstanceOf(Date);
expect(date).toBeInstanceOf(Date);
});
});

View File

@@ -0,0 +1,42 @@
/**
* Copyright 2026 actions-toolkit authors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import {describe, expect, it} from 'vitest';
import fs from 'fs';
import os from 'os';
import path from 'path';
import {GitHubArtifact} from '../../src/github/artifact.js';
import {Util} from '../../src/util.js';
const fixturesDir = path.join(__dirname, '..', '.fixtures');
const tmpDir = fs.mkdtempSync(path.join(process.env.TEMP || os.tmpdir(), 'github-itg-'));
const maybe = !process.env.GITHUB_ACTIONS || (process.env.GITHUB_ACTIONS === 'true' && process.env.ImageOS && process.env.ImageOS.startsWith('ubuntu')) ? describe : describe.skip;
maybe('upload', () => {
it('uploads an artifact', async () => {
const filename = path.join(tmpDir, `github-repo-${Util.generateRandomString()}.json`);
fs.copyFileSync(path.join(fixturesDir, `github-repo.json`), filename);
const res = await GitHubArtifact.upload({
filename: filename,
retentionDays: 1
});
expect(res).toBeDefined();
console.log('uploadArtifactResponse', res);
expect(res?.url).toBeDefined();
});
});

View File

@@ -0,0 +1,41 @@
/**
* Copyright 2026 actions-toolkit authors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import {describe, expect, it} from 'vitest';
import {GitHub} from '../../src/github/github.js';
describe('repoData', () => {
it('returns docker/actions-toolkit', async () => {
if (!process.env.GITHUB_TOKEN) {
console.log(`GitHub token not available, skipping test`);
return;
}
const originalEnv = process.env;
process.env = {
...originalEnv,
GITHUB_REPOSITORY: 'docker/actions-toolkit'
};
try {
const github = new GitHub({token: process.env.GITHUB_TOKEN});
const repo = await github.repoData();
const fullName = repo.full_name ?? `${repo.owner?.login}/${repo.name}`;
expect(fullName).toEqual('docker/actions-toolkit');
} finally {
process.env = originalEnv;
}
});
});

View File

@@ -14,21 +14,31 @@
* limitations under the License.
*/
import {describe, expect, jest, it, beforeEach, afterEach, test} from '@jest/globals';
import {describe, expect, vi, it, beforeEach, afterEach, test} from 'vitest';
import * as fs from 'fs';
import * as path from 'path';
import * as core from '@actions/core';
import {GitHub} from '../src/github';
import {GitHubRepo} from '../src/types/github';
import {GitHub} from '../../src/github/github.js';
import {GitHubRepo} from '../../src/types/github/github.js';
import repoFixture from './.fixtures/github-repo.json';
jest.spyOn(GitHub.prototype, 'repoData').mockImplementation((): Promise<GitHubRepo> => {
return <Promise<GitHubRepo>>(repoFixture as unknown);
import repoFixture from '../.fixtures/github-repo.json' with {type: 'json'};
const fixturesDir = path.join(__dirname, '..', '.fixtures');
vi.mock('@actions/core', async () => {
const actual = await vi.importActual<typeof import('@actions/core')>('@actions/core');
return {
...actual,
info: vi.fn()
};
});
describe('repoData', () => {
it('returns GitHub repo data', async () => {
vi.spyOn(GitHub.prototype, 'repoData').mockImplementation((): Promise<GitHubRepo> => {
return <Promise<GitHubRepo>>(repoFixture as unknown);
});
const github = new GitHub();
expect((await github.repoData()).name).toEqual('Hello-World');
});
@@ -53,7 +63,7 @@ describe('releases', () => {
['.github/docker-releases.json'],
['.github/regclient-releases.json'],
['.github/undock-releases.json'],
])('returns %p', async (path: string) => {
])('returns %o', async (path: string) => {
const github = new GitHub();
const releases = await github.releases('App', {
owner: 'docker',
@@ -69,7 +79,7 @@ describe('releases', () => {
describe('serverURL', () => {
const originalEnv = process.env;
beforeEach(() => {
jest.resetModules();
vi.resetModules();
process.env = {
...originalEnv,
GITHUB_SERVER_URL: 'https://foo.github.com'
@@ -90,7 +100,7 @@ describe('serverURL', () => {
describe('apiURL', () => {
const originalEnv = process.env;
beforeEach(() => {
jest.resetModules();
vi.resetModules();
process.env = {
...originalEnv,
GITHUB_API_URL: 'https://bar.github.com'
@@ -126,7 +136,7 @@ describe('workflowRunURL', () => {
describe('actionsRuntimeToken', () => {
const originalEnv = process.env;
beforeEach(() => {
jest.resetModules();
vi.resetModules();
process.env = {
...originalEnv
};
@@ -146,10 +156,7 @@ describe('actionsRuntimeToken', () => {
}).toThrow();
});
it('fixture', async () => {
process.env.ACTIONS_RUNTIME_TOKEN = fs
.readFileSync(path.join(__dirname, '.fixtures', 'runtimeToken.txt'))
.toString()
.trim();
process.env.ACTIONS_RUNTIME_TOKEN = fs.readFileSync(path.join(fixturesDir, 'runtimeToken.txt')).toString().trim();
const runtimeToken = GitHub.actionsRuntimeToken;
expect(runtimeToken?.ac).toEqual('[{"Scope":"refs/heads/master","Permission":3}]');
expect(runtimeToken?.iss).toEqual('vstoken.actions.githubusercontent.com');
@@ -159,7 +166,7 @@ describe('actionsRuntimeToken', () => {
describe('printActionsRuntimeTokenACs', () => {
const originalEnv = process.env;
beforeEach(() => {
jest.resetModules();
vi.resetModules();
process.env = {
...originalEnv
};
@@ -176,11 +183,8 @@ describe('printActionsRuntimeTokenACs', () => {
await expect(GitHub.printActionsRuntimeTokenACs()).rejects.toThrow(new Error('Cannot parse GitHub Actions Runtime Token: Invalid token specified: missing part #2'));
});
it('refs/heads/master', async () => {
const infoSpy = jest.spyOn(core, 'info');
process.env.ACTIONS_RUNTIME_TOKEN = fs
.readFileSync(path.join(__dirname, '.fixtures', 'runtimeToken.txt'))
.toString()
.trim();
const infoSpy = vi.mocked(core.info);
process.env.ACTIONS_RUNTIME_TOKEN = fs.readFileSync(path.join(fixturesDir, 'runtimeToken.txt')).toString().trim();
await GitHub.printActionsRuntimeTokenACs();
expect(infoSpy).toHaveBeenCalledTimes(1);
expect(infoSpy).toHaveBeenCalledWith(`refs/heads/master: read/write`);

View File

@@ -14,39 +14,24 @@
* limitations under the License.
*/
import {describe, expect, it, test} from '@jest/globals';
import {describe, expect, it, test} from 'vitest';
import fs from 'fs';
import os from 'os';
import path from 'path';
import {Buildx} from '../src/buildx/buildx';
import {Bake} from '../src/buildx/bake';
import {Build} from '../src/buildx/build';
import {Exec} from '../src/exec';
import {GitHub} from '../src/github';
import {History} from '../src/buildx/history';
import {Util} from '../src/util';
import {Buildx} from '../../src/buildx/buildx.js';
import {Bake} from '../../src/buildx/bake.js';
import {Build} from '../../src/buildx/build.js';
import {Exec} from '../../src/exec.js';
import {GitHubArtifact} from '../../src/github/artifact.js';
import {GitHubSummary} from '../../src/github/summary.js';
import {History} from '../../src/buildx/history.js';
const fixturesDir = path.join(__dirname, '.fixtures');
const fixturesDir = path.join(__dirname, '..', '.fixtures');
const tmpDir = fs.mkdtempSync(path.join(process.env.TEMP || os.tmpdir(), 'github-itg-'));
const maybe = !process.env.GITHUB_ACTIONS || (process.env.GITHUB_ACTIONS === 'true' && process.env.ImageOS && process.env.ImageOS.startsWith('ubuntu')) ? describe : describe.skip;
maybe('uploadArtifact', () => {
it('uploads an artifact', async () => {
const filename = path.join(tmpDir, `github-repo-${Util.generateRandomString()}.json`);
fs.copyFileSync(path.join(fixturesDir, `github-repo.json`), filename);
const res = await GitHub.uploadArtifact({
filename: filename,
mimeType: 'application/json',
retentionDays: 1
});
expect(res).toBeDefined();
console.log('uploadArtifactResponse', res);
expect(res?.url).toBeDefined();
});
});
maybe('writeBuildSummary', () => {
// prettier-ignore
test.each([
@@ -98,15 +83,14 @@ maybe('writeBuildSummary', () => {
expect(exportRes?.dockerbuildSize).toBeDefined();
expect(exportRes?.summaries).toBeDefined();
const uploadRes = await GitHub.uploadArtifact({
const uploadRes = await GitHubArtifact.upload({
filename: exportRes?.dockerbuildFilename,
mimeType: 'application/gzip',
retentionDays: 1
});
expect(uploadRes).toBeDefined();
expect(uploadRes?.url).toBeDefined();
await GitHub.writeBuildSummary({
await GitHubSummary.writeBuildSummary({
exportRes: exportRes,
uploadRes: uploadRes,
inputs: {
@@ -178,15 +162,14 @@ maybe('writeBuildSummary', () => {
expect(exportRes?.dockerbuildSize).toBeDefined();
expect(exportRes?.summaries).toBeDefined();
const uploadRes = await GitHub.uploadArtifact({
const uploadRes = await GitHubArtifact.upload({
filename: exportRes?.dockerbuildFilename,
mimeType: 'application/gzip',
retentionDays: 1
});
expect(uploadRes).toBeDefined();
expect(uploadRes?.url).toBeDefined();
await GitHub.writeBuildSummary({
await GitHubSummary.writeBuildSummary({
exportRes: exportRes,
uploadRes: uploadRes,
inputs: {
@@ -233,15 +216,14 @@ maybe('writeBuildSummary', () => {
expect(exportRes?.dockerbuildSize).toBeDefined();
expect(exportRes?.summaries).toBeDefined();
const uploadRes = await GitHub.uploadArtifact({
const uploadRes = await GitHubArtifact.upload({
filename: exportRes?.dockerbuildFilename,
mimeType: 'application/gzip',
retentionDays: 1
});
expect(uploadRes).toBeDefined();
expect(uploadRes?.url).toBeDefined();
await GitHub.writeBuildSummary({
await GitHubSummary.writeBuildSummary({
exportRes: exportRes,
uploadRes: uploadRes,
inputs: {
@@ -288,7 +270,7 @@ maybe('writeBuildSummary', () => {
expect(exportRes?.dockerbuildSize).toBeDefined();
expect(exportRes?.summaries).toBeDefined();
await GitHub.writeBuildSummary({
await GitHubSummary.writeBuildSummary({
exportRes: exportRes,
inputs: {
context: fixturesDir,

View File

@@ -14,16 +14,17 @@
* limitations under the License.
*/
import {afterEach, describe, expect, jest, test} from '@jest/globals';
import {afterEach, describe, expect, test} from 'vitest';
import fs from 'fs';
import os from 'os';
import path from 'path';
import * as rimraf from 'rimraf';
import osm = require('os');
import {OCI} from '../../src/oci/oci';
import {mockArch, mockPlatform} from '../.helpers/os.js';
import {Platform} from '../../src/types/oci/descriptor';
import {OCI} from '../../src/oci/oci.js';
import {Platform} from '../../src/types/oci/descriptor.js';
const fixturesDir = path.join(__dirname, '..', '.fixtures');
const tmpDir = fs.mkdtempSync(path.join(process.env.TEMP || os.tmpdir(), 'oci-oci-'));
@@ -44,8 +45,8 @@ describe('defaultPlatform', () => {
['linux', 'ppc64', {architecture: 'ppc64le', os: 'linux'}],
['linux', 's390x', {architecture: 's390x', os: 'linux'}]
])('default platform for %s/%s', async (os: string, arch: string, expected: Platform) => {
jest.spyOn(osm, 'platform').mockImplementation(() => os as NodeJS.Platform);
jest.spyOn(osm, 'arch').mockImplementation(() => arch);
mockPlatform(os as NodeJS.Platform);
mockArch(arch);
const res = OCI.defaultPlatform();
expect(res).toEqual(expected);
});
@@ -55,7 +56,7 @@ describe('loadArchive', () => {
// prettier-ignore
test.each(fs.readdirSync(path.join(fixturesDir, 'oci-archive')).filter(file => {
return fs.statSync(path.join(path.join(fixturesDir, 'oci-archive'), file)).isFile();
}).map(filename => [filename]))('extracting %p', async (filename) => {
}).map(filename => [filename]))('extracting %o', async (filename) => {
const res = await OCI.loadArchive({
file: path.join(fixturesDir, 'oci-archive', filename)
});

View File

@@ -14,10 +14,10 @@
* limitations under the License.
*/
import {describe, expect, test} from '@jest/globals';
import {describe, expect, test} from 'vitest';
import * as fs from 'fs';
import {Install} from '../../src/regclient/install';
import {Install} from '../../src/regclient/install.js';
describe('download', () => {
// prettier-ignore

View File

@@ -14,14 +14,15 @@
* limitations under the License.
*/
import {describe, expect, it, jest, test, afterEach} from '@jest/globals';
import {describe, expect, it, test, afterEach} from 'vitest';
import fs from 'fs';
import os from 'os';
import path from 'path';
import * as rimraf from 'rimraf';
import osm = require('os');
import {Install} from '../../src/regclient/install';
import {mockArch, mockPlatform} from '../.helpers/os.js';
import {Install} from '../../src/regclient/install.js';
const tmpDir = fs.mkdtempSync(path.join(process.env.TEMP || os.tmpdir(), 'regclient-install-'));
@@ -35,7 +36,7 @@ describe('download', () => {
['v0.8.2'],
['latest']
])(
'acquires %p of regclient', async (version) => {
'acquires %o of regclient', async (version) => {
const install = new Install();
const toolPath = await install.download(version);
expect(fs.existsSync(toolPath)).toBe(true);
@@ -48,7 +49,7 @@ describe('download', () => {
// following versions are already cached to htc from previous test cases
['v0.8.2'],
])(
'acquires %p of regclient with cache', async (version) => {
'acquires %o of regclient with cache', async (version) => {
const install = new Install();
const toolPath = await install.download(version);
expect(fs.existsSync(toolPath)).toBe(true);
@@ -58,7 +59,7 @@ describe('download', () => {
test.each([
['v0.8.1'],
])(
'acquires %p of regclient without cache', async (version) => {
'acquires %o of regclient without cache', async (version) => {
const install = new Install();
const toolPath = await install.download(version, true);
expect(fs.existsSync(toolPath)).toBe(true);
@@ -75,8 +76,8 @@ describe('download', () => {
['linux', 's390x'],
])(
'acquires regclient for %s/%s', async (os, arch) => {
jest.spyOn(osm, 'platform').mockImplementation(() => os as NodeJS.Platform);
jest.spyOn(osm, 'arch').mockImplementation(() => arch);
mockPlatform(os as NodeJS.Platform);
mockArch(arch);
const install = new Install();
const regclientBin = await install.download('latest');
expect(fs.existsSync(regclientBin)).toBe(true);

View File

@@ -14,20 +14,20 @@
* limitations under the License.
*/
import {describe, expect, it, jest, test} from '@jest/globals';
import {describe, expect, it, vi, test} from 'vitest';
import * as semver from 'semver';
import {Exec} from '../../src/exec';
import {Regctl} from '../../src/regclient/regctl';
import {Exec} from '../../src/exec.js';
import {Regctl} from '../../src/regclient/regctl.js';
import {Image} from '../../src/types/oci/config';
import {Image} from '../../src/types/oci/config.js';
describe('manifestGet', () => {
// prettier-ignore
test.each([
['moby/moby-bin:28.1.0-rc.2'],
['crazymax/diun:4.17.0'],
])('given %p', async image => {
])('given %o', async image => {
const regctl = new Regctl();
const manifest = await regctl.manifestGet({
image: image,
@@ -45,7 +45,7 @@ describe('blobGet', () => {
test.each([
['moby/moby-bin', 'sha256:234fccbd13fde0ba978a19f728cbdc67e29bc76247ac560822bb6ae5236c0bf0'],
['crazymax/diun', 'sha256:1e4881f66e0ec0f1710b837002107050bbbc0a231d8a42d7f422b56a139900bb'],
])('given %p', async (repo, digest) => {
])('given %o', async (repo, digest) => {
const regctl = new Regctl();
const blob = await regctl.blobGet({
repository: repo,
@@ -60,7 +60,7 @@ describe('image config', () => {
test.each([
['moby/moby-bin:28.1.0-rc.2'],
['crazymax/diun:4.17.0'],
])('given %p', async image => {
])('given %o', async image => {
const regctl = new Regctl();
const manifest = await regctl.manifestGet({
image: image,
@@ -82,7 +82,7 @@ describe('image config', () => {
describe('isAvailable', () => {
it('checks regctl is available', async () => {
const execSpy = jest.spyOn(Exec, 'getExecOutput');
const execSpy = vi.spyOn(Exec, 'getExecOutput');
const regctl = new Regctl();
await regctl.isAvailable();
expect(execSpy).toHaveBeenCalledWith(`regctl`, [], {
@@ -94,7 +94,7 @@ describe('isAvailable', () => {
describe('printVersion', () => {
it('prints regctl version', async () => {
const execSpy = jest.spyOn(Exec, 'exec');
const execSpy = vi.spyOn(Exec, 'exec');
const regctl = new Regctl();
await regctl.printVersion();
expect(execSpy).toHaveBeenCalledWith(`regctl`, ['version'], {
@@ -115,7 +115,7 @@ describe('versionSatisfies', () => {
['v0.8.2', '>=0.6.0', true],
['v0.8.0', '>0.6.0', true],
['v0.8.0', '<0.3.0', false]
])('given %p', async (version, range, expected) => {
])('given %o', async (version, range, expected) => {
const regctl = new Regctl();
expect(await regctl.versionSatisfies(range, version)).toBe(expected);
});

View File

@@ -14,15 +14,15 @@
* limitations under the License.
*/
import {beforeAll, describe, expect, jest, it} from '@jest/globals';
import {beforeAll, describe, expect, it} from 'vitest';
import * as path from 'path';
import {Buildx} from '../../src/buildx/buildx';
import {Build} from '../../src/buildx/build';
import {Install as CosignInstall} from '../../src/cosign/install';
import {Docker} from '../../src/docker/docker';
import {Exec} from '../../src/exec';
import {Sigstore} from '../../src/sigstore/sigstore';
import {Buildx} from '../../src/buildx/buildx.js';
import {Build} from '../../src/buildx/build.js';
import {Install as CosignInstall} from '../../src/cosign/install.js';
import {Docker} from '../../src/docker/docker.js';
import {Exec} from '../../src/exec.js';
import {Sigstore} from '../../src/sigstore/sigstore.js';
const fixturesDir = path.join(__dirname, '..', '.fixtures');
@@ -30,9 +30,6 @@ const runTest = process.env.GITHUB_ACTIONS && process.env.GITHUB_ACTIONS === 'tr
const maybeIdToken = runTest && process.env.ACTIONS_ID_TOKEN_REQUEST_URL ? describe : describe.skip;
// needs current GitHub repo info
jest.unmock('@actions/github');
beforeAll(async () => {
const cosignInstall = new CosignInstall();
const cosignBinPath = await cosignInstall.download({

View File

@@ -14,17 +14,17 @@
* limitations under the License.
*/
import {beforeAll, describe, expect, jest, it, test} from '@jest/globals';
import {beforeAll, describe, expect, it, test} from 'vitest';
import fs from 'fs';
import * as path from 'path';
import {Buildx} from '../../src/buildx/buildx';
import {Build} from '../../src/buildx/build';
import {Install as CosignInstall} from '../../src/cosign/install';
import {Docker} from '../../src/docker/docker';
import {Exec} from '../../src/exec';
import {OCI} from '../../src/oci/oci';
import {Sigstore} from '../../src/sigstore/sigstore';
import {Buildx} from '../../src/buildx/buildx.js';
import {Build} from '../../src/buildx/build.js';
import {Install as CosignInstall} from '../../src/cosign/install.js';
import {Docker} from '../../src/docker/docker.js';
import {Exec} from '../../src/exec.js';
import {OCI} from '../../src/oci/oci.js';
import {Sigstore} from '../../src/sigstore/sigstore.js';
const fixturesDir = path.join(__dirname, '..', '.fixtures');
@@ -33,9 +33,6 @@ const runTest = process.env.GITHUB_ACTIONS && process.env.GITHUB_ACTIONS === 'tr
const maybe = runTest ? describe : describe.skip;
const maybeIdToken = runTest && process.env.ACTIONS_ID_TOKEN_REQUEST_URL ? describe : describe.skip;
// needs current GitHub repo info
jest.unmock('@actions/github');
beforeAll(async () => {
const cosignInstall = new CosignInstall();
const cosignBinPath = await cosignInstall.download({

View File

@@ -14,10 +14,10 @@
* limitations under the License.
*/
import {describe, expect, test} from '@jest/globals';
import {describe, expect, test} from 'vitest';
import * as fs from 'fs';
import {Install} from '../../src/undock/install';
import {Install} from '../../src/undock/install.js';
describe('download', () => {
// prettier-ignore

View File

@@ -14,14 +14,15 @@
* limitations under the License.
*/
import {describe, expect, it, jest, test, afterEach} from '@jest/globals';
import {describe, expect, it, test, afterEach} from 'vitest';
import fs from 'fs';
import os from 'os';
import path from 'path';
import * as rimraf from 'rimraf';
import osm = require('os');
import {Install} from '../../src/undock/install';
import {mockArch, mockPlatform} from '../.helpers/os.js';
import {Install} from '../../src/undock/install.js';
const tmpDir = fs.mkdtempSync(path.join(process.env.TEMP || os.tmpdir(), 'undock-install-'));
@@ -36,7 +37,7 @@ describe('download', () => {
['v0.7.0'],
['latest']
])(
'acquires %p of undock', async (version) => {
'acquires %o of undock', async (version) => {
const install = new Install();
const toolPath = await install.download(version);
expect(fs.existsSync(toolPath)).toBe(true);
@@ -50,7 +51,7 @@ describe('download', () => {
['v0.4.0'],
['v0.7.0'],
])(
'acquires %p of undock with cache', async (version) => {
'acquires %o of undock with cache', async (version) => {
const install = new Install();
const toolPath = await install.download(version);
expect(fs.existsSync(toolPath)).toBe(true);
@@ -61,7 +62,7 @@ describe('download', () => {
['v0.5.0'],
['v0.6.0'],
])(
'acquires %p of undock without cache', async (version) => {
'acquires %o of undock without cache', async (version) => {
const install = new Install();
const toolPath = await install.download(version, true);
expect(fs.existsSync(toolPath)).toBe(true);
@@ -80,8 +81,8 @@ describe('download', () => {
['linux', 's390x'],
])(
'acquires undock for %s/%s', async (os, arch) => {
jest.spyOn(osm, 'platform').mockImplementation(() => os as NodeJS.Platform);
jest.spyOn(osm, 'arch').mockImplementation(() => arch);
mockPlatform(os as NodeJS.Platform);
mockArch(arch);
const install = new Install();
const undockBin = await install.download('latest');
expect(fs.existsSync(undockBin)).toBe(true);

View File

@@ -14,12 +14,12 @@
* limitations under the License.
*/
import {describe, expect, it} from '@jest/globals';
import {describe, expect, it} from 'vitest';
import fs from 'fs';
import os from 'os';
import {Undock} from '../../src/undock/undock';
import {Install as UndockInstall} from '../../src/undock/install';
import {Undock} from '../../src/undock/undock.js';
import {Install as UndockInstall} from '../../src/undock/install.js';
describe('run', () => {
it('extracts moby/moby-bin:26.1.5', async () => {

View File

@@ -17,11 +17,11 @@
import fs from 'fs';
import os from 'os';
import path from 'path';
import {describe, expect, it, jest, test} from '@jest/globals';
import {describe, expect, it, vi, test} from 'vitest';
import * as semver from 'semver';
import {Exec} from '../../src/exec';
import {Undock} from '../../src/undock/undock';
import {Exec} from '../../src/exec.js';
import {Undock} from '../../src/undock/undock.js';
const tmpDir = fs.mkdtempSync(path.join(process.env.TEMP || os.tmpdir(), 'undock-undock-'));
@@ -43,7 +43,7 @@ describe('run', () => {
describe('isAvailable', () => {
it('checks undock is available', async () => {
const execSpy = jest.spyOn(Exec, 'getExecOutput');
const execSpy = vi.spyOn(Exec, 'getExecOutput');
const undock = new Undock();
await undock.isAvailable();
expect(execSpy).toHaveBeenCalledWith(`undock`, [], {
@@ -55,7 +55,7 @@ describe('isAvailable', () => {
describe('printVersion', () => {
it('prints undock version', async () => {
const execSpy = jest.spyOn(Exec, 'exec');
const execSpy = vi.spyOn(Exec, 'exec');
const undock = new Undock();
await undock.printVersion();
expect(execSpy).toHaveBeenCalledWith(`undock`, ['--version'], {
@@ -76,7 +76,7 @@ describe('versionSatisfies', () => {
['v0.4.1', '>=0.3.2', true],
['v0.8.0', '>0.6.0', true],
['v0.8.0', '<0.3.0', false]
])('given %p', async (version, range, expected) => {
])('given %o', async (version, range, expected) => {
const undock = new Undock();
expect(await undock.versionSatisfies(range, version)).toBe(expected);
});

View File

@@ -14,11 +14,11 @@
* limitations under the License.
*/
import {describe, expect, it, test} from '@jest/globals';
import {describe, expect, it, test} from 'vitest';
import * as fs from 'fs';
import * as path from 'path';
import {Util} from '../src/util';
import {Util} from '../src/util.js';
describe('getInputList', () => {
it('single line correctly', async () => {
@@ -87,6 +87,12 @@ describe('getInputList', () => {
expect(res).toEqual(['foo=bar', 'bar=qux']);
});
it('multiline with comment and no infix comment', async () => {
setInput('labels', '# ignore this\nfoo=bar\nbar=qux#baz');
const res = Util.getInputList('labels', {comment: '#', commentNoInfix: true});
expect(res).toEqual(['foo=bar', 'bar=qux#baz']);
});
it('different new lines and ignoring comma correctly', async () => {
setInput('cache-from', 'user/app:cache\r\ntype=local,src=path/to/dir');
const res = Util.getInputList('cache-from', {ignoreComma: true});
@@ -247,7 +253,7 @@ describe('isValidURL', () => {
['git://github.com/user/repo.git', false],
['github.com/moby/buildkit.git#main', false],
['v0.4.1', false]
])('given %p', async (url, expected) => {
])('given %o', async (url, expected) => {
expect(Util.isValidURL(url)).toEqual(expected);
});
});
@@ -260,7 +266,7 @@ describe('isValidRef', () => {
['git://github.com/user/repo.git', true],
['github.com/moby/buildkit.git#main', true],
['v0.4.1', false]
])('given %p', async (url, expected) => {
])('given %o', async (url, expected) => {
expect(Util.isValidRef(url)).toEqual(expected);
});
});
@@ -278,7 +284,7 @@ describe('trimPrefix', () => {
['abcdabc', 'abc', 'dabc'],
['abcabc', 'abc', 'abc'],
['abcdabc', 'd', 'abcdabc']
])('given %p', async (str, prefix, expected) => {
])('given %o', async (str, prefix, expected) => {
expect(Util.trimPrefix(str, prefix)).toEqual(expected);
});
});
@@ -295,7 +301,7 @@ describe('trimSuffix', () => {
['abcdabc', 'abc', 'abcd'],
['abcabc', 'abc', 'abc'],
['abcdabc', 'd', 'abcdabc']
])('given %p', async (str, suffix, expected) => {
])('given %o', async (str, suffix, expected) => {
expect(Util.trimSuffix(str, suffix)).toEqual(expected);
});
});
@@ -309,6 +315,7 @@ describe('hash', () => {
// https://github.com/golang/go/blob/f6b93a4c358b28b350dd8fe1780c1f78e520c09c/src/strconv/atob_test.go#L36-L58
describe('parseBool', () => {
[
{input: undefined, expected: false, throwsError: false},
{input: '', expected: false, throwsError: true},
{input: 'asdf', expected: false, throwsError: true},
{input: '0', expected: false, throwsError: false},
@@ -326,16 +333,23 @@ describe('parseBool', () => {
].forEach(({input, expected, throwsError}) => {
test(`parseBool("${input}")`, () => {
if (throwsError) {
// eslint-disable-next-line jest/no-conditional-expect
// eslint-disable-next-line vitest/no-conditional-expect
expect(() => Util.parseBool(input)).toThrow();
} else {
// eslint-disable-next-line jest/no-conditional-expect
// eslint-disable-next-line vitest/no-conditional-expect
expect(Util.parseBool(input)).toBe(expected);
}
});
});
});
describe('parseBoolOrDefault', () => {
it('returns default value when input is invalid', () => {
expect(Util.parseBoolOrDefault('asdf')).toBe(false);
expect(Util.parseBoolOrDefault('asdf', true)).toBe(true);
});
});
describe('formatFileSize', () => {
test('should return "0 Bytes" when given 0 bytes', () => {
expect(Util.formatFileSize(0)).toBe('0 Bytes');

View File

@@ -14,9 +14,9 @@
# See the License for the specific language governing permissions and
# limitations under the License.
ARG NODE_VERSION=20
ARG DOCKER_VERSION=28.3
ARG BUILDX_VERSION=0.31.0
ARG NODE_VERSION=24
ARG DOCKER_VERSION=29.2
ARG BUILDX_VERSION=0.32.1
ARG COMPOSE_VERSION=2.39.1
ARG UNDOCK_VERSION=0.10.0
ARG REGCTL_VERSION=v0.8.2
@@ -96,8 +96,8 @@ RUN --mount=type=bind,target=.,rw \
--mount=type=bind,from=undock,source=/usr/local/bin/undock,target=/usr/bin/undock \
--mount=type=bind,from=regctl,source=/regctl,target=/usr/bin/regctl \
--mount=type=bind,from=cosign,source=/ko-app/cosign,target=/usr/bin/cosign \
--mount=type=secret,id=GITHUB_TOKEN \
GITHUB_TOKEN=$(cat /run/secrets/GITHUB_TOKEN) yarn run test:coverage --coverageDirectory=/tmp/coverage
--mount=type=secret,id=GITHUB_TOKEN,env=GITHUB_TOKEN \
yarn run test:coverage --coverage.reportsDirectory=/tmp/coverage
FROM scratch AS test-coverage
COPY --from=test /tmp/coverage /

View File

@@ -1,84 +0,0 @@
/**
* Copyright 2025 actions-toolkit authors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
/* eslint-disable @typescript-eslint/no-require-imports */
const {defineConfig, globalIgnores} = require('eslint/config');
const {fixupConfigRules, fixupPluginRules} = require('@eslint/compat');
const typescriptEslint = require('@typescript-eslint/eslint-plugin');
const jestPlugin = require('eslint-plugin-jest');
const prettier = require('eslint-plugin-prettier');
const globals = require('globals');
const tsParser = require('@typescript-eslint/parser');
const js = require('@eslint/js');
const {FlatCompat} = require('@eslint/eslintrc');
// __dirname and __filename exist natively in CommonJS
const compat = new FlatCompat({
baseDirectory: __dirname,
recommendedConfig: js.configs.recommended,
allConfig: js.configs.all
});
module.exports = defineConfig([
globalIgnores(['.yarn/**/*', 'lib/**/*', 'coverage/**/*', 'node_modules/**/*']),
{
extends: fixupConfigRules(
compat.extends(
'eslint:recommended',
'plugin:@typescript-eslint/eslint-recommended',
'plugin:@typescript-eslint/recommended',
'plugin:import/errors',
'plugin:import/typescript',
'plugin:import/warnings',
'plugin:jest/recommended',
'plugin:prettier/recommended'
)
),
plugins: {
'@typescript-eslint': fixupPluginRules(typescriptEslint),
jest: fixupPluginRules(jestPlugin),
prettier: fixupPluginRules(prettier)
},
languageOptions: {
globals: {
...globals.node,
...globals.mocha,
...globals.jest
},
parser: tsParser,
ecmaVersion: 2023,
sourceType: 'commonjs'
},
rules: {
'@typescript-eslint/no-require-imports': [
'error',
{
allowAsImport: true
}
],
'import/no-unresolved': [
'error',
{
ignore: ['csv-parse/sync', '@octokit/openapi-types']
}
],
'jest/no-disabled-tests': 0
}
}
]);

68
eslint.config.mjs Normal file
View File

@@ -0,0 +1,68 @@
/**
* Copyright 2025 actions-toolkit authors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import {defineConfig} from 'eslint/config';
import js from '@eslint/js';
import tseslint from '@typescript-eslint/eslint-plugin';
import vitest from '@vitest/eslint-plugin';
import globals from 'globals';
import eslintConfigPrettier from 'eslint-config-prettier/flat';
import eslintPluginPrettier from 'eslint-plugin-prettier';
export default defineConfig([
{
ignores: ['.yarn/**/*', 'coverage/**/*', 'lib/**/*']
},
js.configs.recommended,
...tseslint.configs['flat/recommended'],
eslintConfigPrettier,
{
languageOptions: {
globals: {
...globals.node
}
}
},
{
files: ['__tests__/**'],
...vitest.configs.recommended,
languageOptions: {
globals: {
...globals.node,
...vitest.environments.env.globals
}
},
rules: {
...vitest.configs.recommended.rules,
'vitest/no-conditional-expect': 'error',
'vitest/no-disabled-tests': 0
}
},
{
plugins: {
prettier: eslintPluginPrettier
},
rules: {
'prettier/prettier': 'error',
'@typescript-eslint/no-require-imports': [
'error',
{
allowAsImport: true
}
]
}
}
]);

View File

@@ -14,14 +14,14 @@
# See the License for the specific language governing permissions and
# limitations under the License.
ARG ADDLICENSE_VERSION="v1.1.1"
ARG ALPINE_VERSION="3.21"
ARG GO_VERSION="1.23"
ARG XX_VERSION="1.6.1"
ARG ADDLICENSE_VERSION="v1.2.0"
ARG ALPINE_VERSION="3.23"
ARG GO_VERSION="1.26"
ARG XX_VERSION="1.9.0"
ARG LICENSE_HOLDER="actions-toolkit authors"
ARG LICENSE_TYPE="apache"
ARG LICENSE_FILES=".*\(Dockerfile\|Makefile\|\.js\|\.ts\|\.hcl\|\.sh|\.ps1\)"
ARG LICENSE_FILES=".*\(Dockerfile\|Makefile\|\.js\|\.cjs\|\.mjs\|\.ts\|\.hcl\|\.sh|\.ps1\)"
FROM --platform=$BUILDPLATFORM tonistiigi/xx:${XX_VERSION} AS xx
@@ -52,9 +52,9 @@ ARG LICENSE_TYPE
ARG LICENSE_FILES
RUN --mount=type=bind,target=.,rw \
--mount=from=addlicense,source=/out/addlicense,target=/usr/bin/addlicense \
find . -regex "${LICENSE_FILES}" -not -path "./.yarn/*" -not -path "./node_modules/*" | xargs addlicense -c "$LICENSE_HOLDER" -l "$LICENSE_TYPE" && \
find . -regex "${LICENSE_FILES}" -not -path "./.yarn/*" -not -path "./lib/*" -not -path "./node_modules/*" | xargs addlicense -c "$LICENSE_HOLDER" -l "$LICENSE_TYPE" && \
mkdir /out && \
find . -regex "${LICENSE_FILES}" -not -path "./.yarn/*" -not -path "./node_modules/*" | cpio -pdm /out
find . -regex "${LICENSE_FILES}" -not -path "./.yarn/*" -not -path "./lib/*" -not -path "./node_modules/*" | cpio -pdm /out
FROM scratch AS update
COPY --from=set /out /
@@ -65,4 +65,4 @@ ARG LICENSE_TYPE
ARG LICENSE_FILES
RUN --mount=type=bind,target=. \
--mount=from=addlicense,source=/out/addlicense,target=/usr/bin/addlicense \
find . -regex "${LICENSE_FILES}" -not -path "./.yarn/*" -not -path "./node_modules/*" | xargs addlicense -check -c "$LICENSE_HOLDER" -l "$LICENSE_TYPE"
find . -regex "${LICENSE_FILES}" -not -path "./.yarn/*" -not -path "./lib/*" -not -path "./node_modules/*" | xargs addlicense -check -c "$LICENSE_HOLDER" -l "$LICENSE_TYPE"

View File

@@ -1,50 +0,0 @@
/**
* Copyright 2023 actions-toolkit authors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
/* eslint-disable @typescript-eslint/no-require-imports */
const fs = require('fs');
const os = require('os');
const path = require('path');
const tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), 'docker-actions-toolkit-'));
process.env = Object.assign({}, process.env, {
TEMP: tmpDir,
GITHUB_REPOSITORY: 'docker/actions-toolkit',
GITHUB_RUN_ATTEMPT: 2,
GITHUB_RUN_ID: 2188748038,
GITHUB_RUN_NUMBER: 15,
RUNNER_TEMP: path.join(tmpDir, 'runner-temp'),
RUNNER_TOOL_CACHE: path.join(tmpDir, 'runner-tool-cache')
});
module.exports = {
clearMocks: true,
testEnvironment: 'node',
moduleFileExtensions: ['js', 'ts'],
setupFiles: ['dotenv/config'],
testMatch: ['**/*.test.ts'],
transform: {
'^.+\\.ts$': 'ts-jest'
},
moduleNameMapper: {
'^csv-parse/sync': '<rootDir>/node_modules/csv-parse/dist/cjs/sync.cjs'
},
collectCoverageFrom: ['src/**/{!(index.ts),}.ts'],
coveragePathIgnorePatterns: ['lib/', 'node_modules/', '__mocks__/', '__tests__/'],
testResultsProcessor: '<rootDir>/__tests__/testResultsProcessor.js',
verbose: true
};

View File

@@ -2,19 +2,16 @@
"name": "@docker/actions-toolkit",
"version": "0.0.0+unknown",
"description": "Toolkit for Docker (GitHub) Actions",
"type": "module",
"scripts": {
"build": "tsc",
"lint": "yarn run prettier && yarn run eslint",
"format": "yarn run prettier:fix && yarn run eslint:fix",
"eslint": "eslint --max-warnings=0 .",
"eslint:fix": "eslint --fix .",
"prettier": "prettier --check \"./**/*.ts\"",
"prettier:fix": "prettier --write \"./**/*.ts\"",
"test": "jest",
"test:coverage": "jest --coverage",
"test:itg": "jest -c jest.config.itg.js --runInBand",
"test:itg-list": "jest -c jest.config.itg.js --listTests",
"test:itg-coverage": "jest -c jest.config.itg.js --coverage --runInBand"
"lint": "eslint --max-warnings=0 .",
"format": "eslint --fix .",
"test": "vitest run -c vitest.config.ts",
"test:coverage": "vitest run -c vitest.config.ts --coverage",
"test:itg": "vitest run -c vitest.config.itg.ts --maxWorkers=1",
"test:itg-list": "node ./__tests__/.setup/list-itg-tests.mjs",
"test:itg-coverage": "vitest run -c vitest.config.itg.ts --coverage --maxWorkers=1"
},
"repository": {
"type": "git",
@@ -45,57 +42,49 @@
"registry": "https://registry.npmjs.org/"
},
"dependencies": {
"@actions/artifact": "^5.0.2",
"@actions/cache": "^5.0.3",
"@actions/core": "^2.0.2",
"@actions/exec": "^2.0.0",
"@actions/github": "^7.0.0",
"@actions/http-client": "^3.0.1",
"@actions/io": "^2.0.0",
"@actions/tool-cache": "^3.0.0",
"@azure/storage-blob": "^12.29.1",
"@octokit/core": "^5.2.2",
"@octokit/plugin-rest-endpoint-methods": "^10.4.1",
"@actions/artifact": "^6.2.1",
"@actions/cache": "^6.0.0",
"@actions/core": "^3.0.0",
"@actions/exec": "^3.0.0",
"@actions/github": "^9.0.0",
"@actions/http-client": "^4.0.0",
"@actions/io": "^3.0.2",
"@actions/tool-cache": "^4.0.0",
"@sigstore/bundle": "^4.0.0",
"@sigstore/sign": "^4.1.0",
"@sigstore/tuf": "^4.0.1",
"@sigstore/sign": "^4.1.1",
"@sigstore/tuf": "^4.0.2",
"@sigstore/verify": "^3.1.0",
"async-retry": "^1.3.3",
"csv-parse": "^6.1.0",
"csv-parse": "^6.2.0",
"gunzip-maybe": "^1.4.2",
"handlebars": "^4.7.8",
"he": "^1.2.0",
"js-yaml": "^4.1.1",
"jwt-decode": "^4.0.0",
"semver": "^7.7.3",
"semver": "^7.7.4",
"tar-stream": "^3.1.7",
"tmp": "^0.2.5"
},
"devDependencies": {
"@eslint/compat": "^2.0.0",
"@eslint/eslintrc": "^3.3.3",
"@eslint/js": "^9.39.2",
"@sigstore/rekor-types": "^4.0.0",
"@eslint/js": "^9.39.3",
"@types/gunzip-maybe": "^1.4.3",
"@types/he": "^1.2.3",
"@types/js-yaml": "^4.0.9",
"@types/node": "^20.19.27",
"@types/node": "^24.11.0",
"@types/semver": "^7.7.1",
"@types/tar-stream": "^3.1.4",
"@types/tmp": "^0.2.6",
"@typescript-eslint/eslint-plugin": "^8.50.0",
"@typescript-eslint/parser": "^8.50.0",
"dotenv": "^17.2.3",
"eslint": "^9.39.2",
"@typescript-eslint/eslint-plugin": "^8.56.1",
"@typescript-eslint/parser": "^8.56.1",
"@vitest/coverage-v8": "^4.0.18",
"@vitest/eslint-plugin": "^1.6.9",
"eslint": "^9.39.3",
"eslint-config-prettier": "^10.1.8",
"eslint-plugin-import": "^2.32.0",
"eslint-plugin-jest": "^29.5.0",
"eslint-plugin-prettier": "^5.5.4",
"jest": "^30.2.0",
"prettier": "^3.7.4",
"rimraf": "^6.1.2",
"ts-jest": "^29.4.6",
"ts-node": "^10.9.2",
"typescript": "^5.9.3"
"eslint-plugin-prettier": "^5.5.5",
"globals": "^17.3.0",
"prettier": "^3.8.1",
"rimraf": "^6.1.3",
"typescript": "^5.9.3",
"vitest": "^4.0.18"
}
}

View File

@@ -17,12 +17,12 @@
import * as core from '@actions/core';
import * as semver from 'semver';
import {Buildx} from '../buildx/buildx';
import {Builder} from '../buildx/builder';
import {Docker} from '../docker/docker';
import {Config} from './config';
import {Buildx} from '../buildx/buildx.js';
import {Builder} from '../buildx/builder.js';
import {Docker} from '../docker/docker.js';
import {Config} from './config.js';
import {BuilderInfo, NodeInfo} from '../types/buildx/builder';
import {BuilderInfo, NodeInfo} from '../types/buildx/builder.js';
export interface BuildKitOpts {
buildx?: Buildx;

View File

@@ -16,7 +16,7 @@
import fs from 'fs';
import {Context} from '../context';
import {Context} from '../context.js';
export class Config {
public resolveFromString(s: string): string {

View File

@@ -14,7 +14,7 @@
* limitations under the License.
*/
import {GitRef, GitURL, GitURLFragment, URLUserInfo} from '../types/buildkit/git';
import {GitRef, GitURL, GitURLFragment, URLUserInfo} from '../types/buildkit/git.js';
export class Git {
private static protoRegexp = new RegExp('^[a-zA-Z0-9]+://');

View File

@@ -18,15 +18,15 @@ import fs from 'fs';
import path from 'path';
import {parse} from 'csv-parse/sync';
import {Buildx} from './buildx';
import {Context} from '../context';
import {Exec} from '../exec';
import {Util} from '../util';
import {Buildx} from './buildx.js';
import {Context} from '../context.js';
import {Exec} from '../exec.js';
import {Util} from '../util.js';
import {ExecOptions} from '@actions/exec';
import {AttestEntry, BakeDefinition, CacheEntry, ExportEntry, SecretEntry, SSHEntry} from '../types/buildx/bake';
import {BuildMetadata} from '../types/buildx/build';
import {VertexWarning} from '../types/buildkit/client';
import {AttestEntry, BakeDefinition, CacheEntry, ExportEntry, SecretEntry, SSHEntry} from '../types/buildx/bake.js';
import {BuildMetadata} from '../types/buildx/build.js';
import {VertexWarning} from '../types/buildkit/client.js';
export interface BakeOpts {
buildx?: Buildx;
@@ -44,6 +44,7 @@ export interface BakeCmdOpts {
sbom?: string;
source?: string;
targets?: Array<string>;
vars?: Array<string>;
githubToken?: string; // for auth with remote definitions on private repos
}
@@ -138,6 +139,11 @@ export class Bake {
args.push('--set', override);
}
}
if (cmdOpts.vars) {
for (const v of cmdOpts.vars) {
args.push('--var', v);
}
}
if (cmdOpts.allow) {
for (const allow of cmdOpts.allow) {
args.push('--allow', allow);

View File

@@ -17,16 +17,17 @@
import fs from 'fs';
import path from 'path';
import * as core from '@actions/core';
import * as github from '@actions/github';
import {parse} from 'csv-parse/sync';
import {Buildx} from './buildx';
import {Context} from '../context';
import {GitHub} from '../github';
import {Util} from '../util';
import {Buildx} from './buildx.js';
import {Context} from '../context.js';
import {GitHub} from '../github/github.js';
import {Util} from '../util.js';
import {BuildMetadata} from '../types/buildx/build';
import {VertexWarning} from '../types/buildkit/client';
import {ProvenancePredicate} from '../types/intoto/slsa_provenance/v0.2/provenance';
import {BuildMetadata, GitContextFormat} from '../types/buildx/build.js';
import {VertexWarning} from '../types/buildkit/client.js';
import {ProvenancePredicate} from '../types/intoto/slsa_provenance/v0.2/provenance.js';
export interface BuildOpts {
buildx?: Buildx;
@@ -37,6 +38,14 @@ export interface ResolveSecretsOpts {
redact?: boolean;
}
export interface GitContextOpts {
ref?: string;
checksum?: string;
subdir?: string;
attrs?: Record<string, string>;
format?: GitContextFormat;
}
export class Build {
private readonly buildx: Buildx;
private readonly iidFilename: string;
@@ -48,6 +57,54 @@ export class Build {
this.metadataFilename = `build-metadata-${Util.generateRandomString()}.json`;
}
public async gitContext(opts?: GitContextOpts): Promise<string> {
const gitContextCommonAttrs = new Set(['ref', 'checksum', 'subdir']);
const setPullRequestHeadRef = Util.parseBoolOrDefault(process.env.DOCKER_DEFAULT_GIT_CONTEXT_PR_HEAD_REF);
const commonAttrs = {
ref: opts?.attrs?.ref,
checksum: opts?.attrs?.checksum,
subdir: opts?.attrs?.subdir
};
const gitChecksum = opts?.checksum || commonAttrs.checksum || github.context.sha;
let ref = opts?.ref || commonAttrs.ref || github.context.ref;
const subdir = opts?.subdir || commonAttrs.subdir;
const attrs = Object.entries(opts?.attrs || {}).filter(([name]) => !gitContextCommonAttrs.has(name));
if (!ref.startsWith('refs/')) {
ref = `refs/heads/${ref}`;
} else if (ref.startsWith(`refs/pull/`) && setPullRequestHeadRef) {
ref = ref.replace(/\/merge$/g, '/head');
}
const baseURL = `${GitHub.serverURL}/${github.context.repo.owner}/${github.context.repo.repo}.git`;
let format = opts?.format;
if (!format) {
const sendGitQueryAsInput = Util.parseBoolOrDefault(process.env.BUILDX_SEND_GIT_QUERY_AS_INPUT);
if (attrs.length > 0) {
format = 'query';
} else if (sendGitQueryAsInput && (await this.buildx.versionSatisfies('>=0.29.0'))) {
format = 'query';
} else {
format = 'fragment';
}
}
if (format === 'query') {
const query = [`ref=${ref}`];
if (gitChecksum) {
query.push(`checksum=${gitChecksum}`);
}
if (subdir && subdir !== '.') {
query.push(`subdir=${subdir}`);
}
for (const [name, value] of attrs) {
query.push(`${name}=${value}`);
}
return `${baseURL}?${query.join('&')}`;
}
const fragmentRef = gitChecksum && !ref.startsWith(`refs/pull/`) ? gitChecksum : ref;
return `${baseURL}#${fragmentRef}${subdir && subdir !== '.' ? `:${subdir}` : ''}`;
}
public getImageIDFilePath(): string {
return path.join(Context.tmpDir(), this.iidFilename);
}
@@ -310,9 +367,11 @@ export class Build {
return res.join(',');
}
public static hasGitAuthTokenSecret(secrets: string[]): boolean {
public static hasGitAuthTokenSecret(secrets: string[], domain?: string): boolean {
for (const secret of secrets) {
if (secret.startsWith('GIT_AUTH_TOKEN=')) {
if (domain && secret.startsWith(`GIT_AUTH_TOKEN.${domain}=`)) {
return true;
} else if (secret.startsWith('GIT_AUTH_TOKEN=')) {
return true;
}
}

View File

@@ -16,10 +16,10 @@
import * as core from '@actions/core';
import {Buildx} from './buildx';
import {Exec} from '../exec';
import {Buildx} from './buildx.js';
import {Exec} from '../exec.js';
import {BuilderInfo, Device, GCPolicy, NodeInfo} from '../types/buildx/builder';
import {BuilderInfo, Device, GCPolicy, NodeInfo} from '../types/buildx/builder.js';
export interface BuilderOpts {
buildx?: Buildx;

View File

@@ -19,16 +19,16 @@ import path from 'path';
import * as core from '@actions/core';
import * as semver from 'semver';
import {Git} from '../buildkit/git';
import {Docker} from '../docker/docker';
import {GitHub} from '../github';
import {Exec} from '../exec';
import {Util} from '../util';
import {Git} from '../buildkit/git.js';
import {Docker} from '../docker/docker.js';
import {GitHub} from '../github/github.js';
import {Exec} from '../exec.js';
import {Util} from '../util.js';
import {VertexWarning} from '../types/buildkit/client';
import {GitURL} from '../types/buildkit/git';
import {Cert, LocalRefsOpts, LocalRefsResponse, LocalState} from '../types/buildx/buildx';
import {GitHubAnnotation} from '../types/github';
import {VertexWarning} from '../types/buildkit/client.js';
import {GitURL} from '../types/buildkit/git.js';
import {Cert, LocalRefsOpts, LocalRefsResponse, LocalState} from '../types/buildx/buildx.js';
import {GitHubAnnotation} from '../types/github/github.js';
export interface BuildxOpts {
standalone?: boolean;

View File

@@ -14,21 +14,17 @@
* limitations under the License.
*/
import {ChildProcessByStdio, spawn} from 'child_process';
import fs from 'fs';
import os from 'os';
import path from 'path';
import {Readable, Writable} from 'stream';
import * as core from '@actions/core';
import {Buildx} from './buildx';
import {Context} from '../context';
import {Docker} from '../docker/docker';
import {Exec} from '../exec';
import {GitHub} from '../github';
import {Util} from '../util';
import {Buildx} from './buildx.js';
import {Context} from '../context.js';
import {Exec} from '../exec.js';
import {GitHub} from '../github/github.js';
import {Util} from '../util.js';
import {ExportOpts, ExportResponse, InspectOpts, InspectResponse, Summaries} from '../types/buildx/history';
import {ExportOpts, ExportResponse, InspectOpts, InspectResponse, Summaries} from '../types/buildx/history.js';
export interface HistoryOpts {
buildx?: Buildx;
@@ -74,6 +70,10 @@ export class History {
}
public async export(opts: ExportOpts): Promise<ExportResponse> {
if (!(await this.buildx.versionSatisfies('>=0.23.0'))) {
throw new Error('Buildx >= 0.23.0 is required to export a build record');
}
let builderName: string = '';
let nodeName: string = '';
const refs: Array<string> = [];
@@ -101,10 +101,6 @@ export class History {
core.info(`exporting build record to ${outDir}`);
fs.mkdirSync(outDir, {recursive: true});
if (opts.useContainer || (await this.buildx.versionSatisfies('<0.23.0'))) {
return await this.exportLegacy(builderName, nodeName, refs, outDir, opts.image);
}
if (await this.buildx.versionSatisfies('<0.24.0')) {
// wait 3 seconds to ensure build records are finalized: https://github.com/moby/buildkit/pull/5109
// not necessary since buildx 0.24.0: https://github.com/docker/buildx/pull/3152
@@ -162,143 +158,6 @@ export class History {
};
}
private async exportLegacy(builderName: string, nodeName: string, refs: Array<string>, outDir: string, image?: string): Promise<ExportResponse> {
if (os.platform() === 'win32') {
throw new Error('Exporting a build record is currently not supported on Windows');
}
if (!(await Docker.isAvailable())) {
throw new Error('Docker is required to export a build record');
}
if (!(await Docker.isDaemonRunning())) {
throw new Error('Docker daemon needs to be running to export a build record');
}
if (!(await this.buildx.versionSatisfies('>=0.13.0'))) {
throw new Error('Buildx >= 0.13.0 is required to export a build record');
}
// wait 3 seconds to ensure build records are finalized: https://github.com/moby/buildkit/pull/5109
await Util.sleep(3);
const buildxInFifoPath = Context.tmpName({
template: 'buildx-in-XXXXXX.fifo',
tmpdir: Context.tmpDir()
});
await Exec.exec('mkfifo', [buildxInFifoPath]);
const buildxOutFifoPath = Context.tmpName({
template: 'buildx-out-XXXXXX.fifo',
tmpdir: Context.tmpDir()
});
await Exec.exec('mkfifo', [buildxOutFifoPath]);
const buildxDialStdioCmd = await this.buildx.getCommand(['--builder', builderName, 'dial-stdio']);
core.info(`[command]${buildxDialStdioCmd.command} ${buildxDialStdioCmd.args.join(' ')}`);
const buildxDialStdioProc = spawn(buildxDialStdioCmd.command, buildxDialStdioCmd.args, {
stdio: ['pipe', 'pipe', 'inherit'],
detached: true
});
let buildxDialStdioKilled = false;
fs.createReadStream(buildxInFifoPath).pipe(buildxDialStdioProc.stdin);
buildxDialStdioProc.stdout.pipe(fs.createWriteStream(buildxOutFifoPath));
buildxDialStdioProc.on('exit', (code, signal) => {
buildxDialStdioKilled = true;
if (signal) {
core.info(`Process "buildx dial-stdio" was killed with signal ${signal}`);
} else {
core.info(`Process "buildx dial-stdio" exited with code ${code}`);
}
});
const tmpDockerbuildFilename = path.join(outDir, 'rec.dockerbuild');
const summaryFilename = path.join(outDir, 'summary.json');
let dockerRunProc: ChildProcessByStdio<Writable, Readable, null> | undefined;
let dockerRunProcKilled = false;
await new Promise<void>((resolve, reject) => {
const ebargs: Array<string> = ['--ref-state-dir=/buildx-refs', `--node=${builderName}/${nodeName}`];
for (const ref of refs) {
ebargs.push(`--ref=${ref}`);
}
if (typeof process.getuid === 'function') {
ebargs.push(`--uid=${process.getuid()}`);
}
if (typeof process.getgid === 'function') {
ebargs.push(`--gid=${process.getgid()}`);
}
// prettier-ignore
const dockerRunArgs = [
'run', '--rm', '-i',
'-v', `${Buildx.refsDir}:/buildx-refs`,
'-v', `${outDir}:/out`,
image || process.env['DOCKER_BUILD_EXPORT_BUILD_IMAGE'] || 'docker.io/dockereng/export-build:latest',
...ebargs
]
core.info(`[command]docker ${dockerRunArgs.join(' ')}`);
dockerRunProc = spawn('docker', dockerRunArgs, {
stdio: ['pipe', 'pipe', 'inherit'],
env: {
...process.env,
DOCKER_CONTENT_TRUST: 'false'
}
});
fs.createReadStream(buildxOutFifoPath).pipe(dockerRunProc.stdin);
dockerRunProc.stdout.pipe(fs.createWriteStream(buildxInFifoPath));
dockerRunProc.on('close', code => {
if (code === 0) {
if (!fs.existsSync(tmpDockerbuildFilename)) {
reject(new Error(`Failed to export build record: ${tmpDockerbuildFilename} not found`));
} else {
resolve();
}
} else {
reject(new Error(`Process "docker run" closed with code ${code}`));
}
});
dockerRunProc.on('error', err => {
core.error(`Error executing "docker run": ${err}`);
reject(err);
});
dockerRunProc.on('exit', (code, signal) => {
dockerRunProcKilled = true;
if (signal) {
core.info(`Process "docker run" was killed with signal ${signal}`);
} else {
core.info(`Process "docker run" exited with code ${code}`);
}
});
})
.catch(err => {
throw err;
})
.finally(() => {
if (buildxDialStdioProc && !buildxDialStdioKilled) {
core.debug('Force terminating "buildx dial-stdio" process');
buildxDialStdioProc.kill('SIGKILL');
}
if (dockerRunProc && !dockerRunProcKilled) {
core.debug('Force terminating "docker run" process');
dockerRunProc.kill('SIGKILL');
}
});
const dockerbuildPath = path.join(outDir, `${History.exportFilename(refs)}.dockerbuild`);
fs.renameSync(tmpDockerbuildFilename, dockerbuildPath);
const dockerbuildStats = fs.statSync(dockerbuildPath);
core.info(`Parsing ${summaryFilename}`);
fs.statSync(summaryFilename);
const summaries = <Summaries>JSON.parse(fs.readFileSync(summaryFilename, {encoding: 'utf-8'}));
return {
dockerbuildFilename: dockerbuildPath,
dockerbuildSize: dockerbuildStats.size,
builderName: builderName,
nodeName: nodeName,
refs: refs,
summaries: summaries
};
}
private static exportFilename(refs: Array<string>): string {
let name = `${GitHub.context.repo.owner}~${GitHub.context.repo.repo}~${refs[0].substring(0, 6).toUpperCase()}`;
if (refs.length > 1) {

View File

@@ -14,13 +14,17 @@
* limitations under the License.
*/
import {Buildx} from './buildx';
import {Exec} from '../exec';
import fs from 'fs';
import * as core from '@actions/core';
import {Manifest as ImageToolsManifest} from '../types/buildx/imagetools';
import {Image} from '../types/oci/config';
import {Descriptor, Platform} from '../types/oci/descriptor';
import {Digest} from '../types/oci/digest';
import {Buildx} from './buildx.js';
import {Context} from '../context.js';
import {Exec} from '../exec.js';
import {AttestationInspectOpts, CreateOpts, CreateResponse, CreateResult, InspectOpts, Manifest as ImageToolsManifest} from '../types/buildx/imagetools.js';
import {Image} from '../types/oci/config.js';
import {Descriptor} from '../types/oci/descriptor.js';
import {Digest} from '../types/oci/digest.js';
export interface ImageToolsOpts {
buildx?: Buildx;
@@ -41,16 +45,12 @@ export class ImageTools {
return await this.getCommand(['inspect', ...args]);
}
public async inspectImage(name: string): Promise<Record<string, Image> | Image> {
const cmd = await this.getInspectCommand([name, '--format', '{{json .Image}}']);
return await Exec.getExecOutput(cmd.command, cmd.args, {
ignoreReturnCode: true,
silent: true
}).then(res => {
if (res.stderr.length > 0 && res.exitCode != 0) {
throw new Error(res.stderr.trim());
}
const parsedOutput = JSON.parse(res.stdout);
public async getCreateCommand(args: Array<string>) {
return await this.getCommand(['create', ...args]);
}
public async inspectImage(opts: InspectOpts): Promise<Record<string, Image> | Image> {
return await this.inspect(opts, '{{json .Image}}', parsedOutput => {
if (typeof parsedOutput === 'object' && !Array.isArray(parsedOutput) && parsedOutput !== null) {
if (Object.prototype.hasOwnProperty.call(parsedOutput, 'config')) {
return <Image>parsedOutput;
@@ -62,16 +62,8 @@ export class ImageTools {
});
}
public async inspectManifest(name: string): Promise<ImageToolsManifest | Descriptor> {
const cmd = await this.getInspectCommand([name, '--format', '{{json .Manifest}}']);
return await Exec.getExecOutput(cmd.command, cmd.args, {
ignoreReturnCode: true,
silent: true
}).then(res => {
if (res.stderr.length > 0 && res.exitCode != 0) {
throw new Error(res.stderr.trim());
}
const parsedOutput = JSON.parse(res.stdout);
public async inspectManifest(opts: InspectOpts): Promise<ImageToolsManifest | Descriptor> {
return await this.inspect(opts, '{{json .Manifest}}', parsedOutput => {
if (typeof parsedOutput === 'object' && !Array.isArray(parsedOutput) && parsedOutput !== null) {
if (Object.prototype.hasOwnProperty.call(parsedOutput, 'manifests')) {
return <ImageToolsManifest>parsedOutput;
@@ -83,17 +75,18 @@ export class ImageTools {
});
}
public async attestationDescriptors(name: string, platform?: Platform): Promise<Array<Descriptor>> {
const manifest = await this.inspectManifest(name);
public async attestationDescriptors(opts: AttestationInspectOpts): Promise<Array<Descriptor>> {
const manifest = await this.inspectManifest(opts);
if (typeof manifest !== 'object' || manifest === null || !('manifests' in manifest) || !Array.isArray(manifest.manifests)) {
throw new Error(`No descriptor found for ${name}`);
throw new Error(`No descriptor found for ${opts.name}`);
}
const attestations = manifest.manifests.filter(m => m.annotations?.['vnd.docker.reference.type'] === 'attestation-manifest');
if (!platform) {
if (!opts.platform) {
return attestations;
}
const platform = opts.platform;
const manifestByDigest = new Map<string, Descriptor>();
for (const m of manifest.manifests) {
@@ -115,7 +108,126 @@ export class ImageTools {
});
}
public async attestationDigests(name: string, platform?: Platform): Promise<Array<Digest>> {
return (await this.attestationDescriptors(name, platform)).map(attestation => attestation.digest);
public async attestationDigests(opts: AttestationInspectOpts): Promise<Array<Digest>> {
return (await this.attestationDescriptors(opts)).map(attestation => attestation.digest);
}
public async create(opts: CreateOpts): Promise<CreateResult | undefined> {
const args: Array<string> = [];
const metadataFile = Context.tmpName({tmpdir: Context.tmpDir(), template: 'imagetools-metadata-XXXXXX'});
const fileSources: Array<string> = [];
const sources: Array<string> = [];
for (const source of opts.sources) {
if (source.startsWith('cwd://')) {
const fileSource = source.substring('cwd://'.length);
if (fileSource.length > 0) {
fileSources.push(fileSource);
}
continue;
}
sources.push(source);
}
if (opts.tags) {
for (const tag of opts.tags) {
args.push('--tag', tag);
}
}
if (opts.platforms) {
for (const platform of opts.platforms) {
args.push('--platform', platform);
}
}
if (opts.annotations) {
for (const annotation of opts.annotations) {
args.push('--annotation', annotation);
}
}
if (opts.dryRun) {
args.push('--dry-run');
} else {
args.push('--metadata-file', metadataFile);
}
for (const fileSource of fileSources) {
args.push('--file', fileSource);
}
for (const source of sources) {
args.push(source);
}
const cmd = await this.getCreateCommand(args);
if (opts.skipExec) {
core.info(`[command]${cmd.command} ${cmd.args.join(' ')}`);
core.info(`Skipped create command`);
return undefined;
}
return await Exec.getExecOutput(cmd.command, cmd.args, {
ignoreReturnCode: true,
silent: opts.silent
}).then(res => {
if (res.stderr.length > 0 && res.exitCode != 0) {
throw new Error(res.stderr.trim());
}
if (!opts.dryRun) {
if (!fs.existsSync(metadataFile)) {
return undefined;
}
const dt = fs.readFileSync(metadataFile, {encoding: 'utf-8'}).trim();
if (dt === '' || dt === 'null') {
return undefined;
}
const response = <CreateResponse>JSON.parse(dt);
const descriptor = response['containerimage.descriptor'];
if (!descriptor) {
return undefined;
}
return {
digest: response['containerimage.digest'] || descriptor.digest,
descriptor: descriptor,
imageNames: response['image.name'] ? response['image.name'].split(',').map(name => name.trim()) : []
};
}
});
}
private async inspect<T>(opts: InspectOpts, format: string, parser: (parsedOutput: unknown) => T): Promise<T> {
const cmd = await this.getInspectCommand([opts.name, '--format', format]);
if (!opts.retryOnManifestUnknown) {
return await this.execInspect(cmd.command, cmd.args, parser);
}
const retries = opts.retryLimit ?? 15;
let lastError: Error | undefined;
for (let attempt = 0; attempt < retries; attempt++) {
try {
return await this.execInspect(cmd.command, cmd.args, parser);
} catch (err) {
lastError = err as Error;
if (!ImageTools.isManifestUnknownError(lastError.message) || attempt === retries - 1) {
throw lastError;
}
core.info(`buildx imagetools inspect command failed with MANIFEST_UNKNOWN, retrying attempt ${attempt + 1}/${retries}...\n${lastError.message}`);
await new Promise(res => setTimeout(res, Math.pow(2, attempt) * 100));
}
}
throw lastError ?? new Error(`ImageTools inspect command failed for ${opts.name}`);
}
private async execInspect<T>(command: string, args: Array<string>, parser: (parsedOutput: unknown) => T): Promise<T> {
return await Exec.getExecOutput(command, args, {
ignoreReturnCode: true,
silent: true
}).then(res => {
if (res.stderr.length > 0 && res.exitCode != 0) {
throw new Error(res.stderr.trim());
}
return parser(JSON.parse(res.stdout));
});
}
private static isManifestUnknownError(message: string): boolean {
return /(MANIFEST_UNKNOWN|manifest unknown|not found: not found)/i.test(message);
}
}

View File

@@ -18,34 +18,48 @@ import fs from 'fs';
import os from 'os';
import path from 'path';
import * as core from '@actions/core';
import * as httpm from '@actions/http-client';
import * as tc from '@actions/tool-cache';
import * as semver from 'semver';
import * as util from 'util';
import {Buildx} from './buildx';
import {Cache} from '../cache';
import {Context} from '../context';
import {Exec} from '../exec';
import {Docker} from '../docker/docker';
import {Git} from '../git';
import {GitHub} from '../github';
import {Util} from '../util';
import {Buildx} from './buildx.js';
import {Cache} from '../cache.js';
import {Context} from '../context.js';
import {Exec} from '../exec.js';
import {Docker} from '../docker/docker.js';
import {Git} from '../git.js';
import {GitHub} from '../github/github.js';
import {Sigstore} from '../sigstore/sigstore.js';
import {Util} from '../util.js';
import {DownloadVersion} from '../types/buildx/buildx';
import {GitHubRelease} from '../types/github';
import {DownloadVersion} from '../types/buildx/buildx.js';
import {GitHubRelease} from '../types/github/github.js';
import {SEARCH_URL} from '../types/sigstore/sigstore.js';
export interface DownloadOpts {
version: string;
ghaNoCache?: boolean;
disableHtc?: boolean;
skipState?: boolean;
verifySignature?: boolean;
}
export interface InstallOpts {
standalone?: boolean;
githubToken?: string;
sigstore?: Sigstore;
}
export class Install {
private readonly standalone: boolean | undefined;
private readonly githubToken: string | undefined;
private readonly sigstore: Sigstore;
constructor(opts?: InstallOpts) {
this.standalone = opts?.standalone;
this.githubToken = opts?.githubToken || process.env.GITHUB_TOKEN;
this.sigstore = opts?.sigstore || new Sigstore();
}
/*
@@ -54,8 +68,8 @@ export class Install {
* @param ghaNoCache: disable binary caching in GitHub Actions cache backend
* @returns path to the buildx binary
*/
public async download(v: string, ghaNoCache?: boolean): Promise<string> {
const version: DownloadVersion = await Install.getDownloadVersion(v);
public async download(opts: DownloadOpts): Promise<string> {
const version: DownloadVersion = await Install.getDownloadVersion(opts.version);
core.debug(`Install.download version: ${version.version}`);
const release: GitHubRelease = await Install.getRelease(version, this.githubToken);
@@ -74,11 +88,11 @@ export class Install {
htcVersion: vspec,
baseCacheDir: path.join(Buildx.configDir, '.bin'),
cacheFile: os.platform() == 'win32' ? 'docker-buildx.exe' : 'docker-buildx',
ghaNoCache: ghaNoCache
ghaNoCache: opts.ghaNoCache
});
const cacheFoundPath = await installCache.find();
if (cacheFoundPath) {
if (!opts.disableHtc && cacheFoundPath) {
core.info(`Buildx binary found in ${cacheFoundPath}`);
return cacheFoundPath;
}
@@ -89,7 +103,11 @@ export class Install {
const htcDownloadPath = await tc.downloadTool(downloadURL, undefined, this.githubToken);
core.debug(`Install.download htcDownloadPath: ${htcDownloadPath}`);
const cacheSavePath = await installCache.save(htcDownloadPath);
if (opts.verifySignature && semver.satisfies(vspec, '>=0.31.0-0', {includePrerelease: true})) {
await this.verifySignature(htcDownloadPath, downloadURL);
}
const cacheSavePath = await installCache.save(htcDownloadPath, opts.skipState);
core.info(`Cached to ${cacheSavePath}`);
return cacheSavePath;
}
@@ -213,6 +231,31 @@ export class Install {
return standalone;
}
private async verifySignature(binPath: string, downloadURL: string): Promise<void> {
const bundleURL = `${downloadURL.replace(/\.exe$/, '')}.sigstore.json`;
core.info(`Downloading keyless verification bundle at ${bundleURL}`);
let bundlePath: string;
try {
bundlePath = await tc.downloadTool(bundleURL, undefined, this.githubToken);
core.debug(`Install.verifySignature bundlePath: ${bundlePath}`);
} catch (e) {
if (e.message && e.message.statusCode === httpm.HttpCodes.NotFound) {
core.info(`No signature bundle found at ${bundleURL}, skipping verification`);
return;
}
throw e;
}
const verifyResult = await this.sigstore.verifyArtifact(binPath, bundlePath, {
// TODO: add githubWorkflowRepository , runnerEnvironment and sourceRepositoryURI extensions when supported by sigstore module
subjectAlternativeName: /^https:\/\/github\.com\/docker\/(github-builder-experimental|github-builder)\/\.github\/workflows\/bake\.yml.*$/,
issuer: 'https://token.actions.githubusercontent.com'
});
core.info(`Buildx binary signature verified! ${verifyResult.tlogID ? `${SEARCH_URL}?logIndex=${verifyResult.tlogID}` : ''}`);
}
private filename(version: string): string {
let arch: string;
switch (os.arch()) {

View File

@@ -16,8 +16,8 @@
import * as core from '@actions/core';
import {Docker} from '../docker/docker';
import {Exec} from '../exec';
import {Docker} from '../docker/docker.js';
import {Exec} from '../exec.js';
export interface ComposeOpts {
standalone?: boolean;

View File

@@ -22,13 +22,13 @@ import * as tc from '@actions/tool-cache';
import * as semver from 'semver';
import * as util from 'util';
import {Cache} from '../cache';
import {Context} from '../context';
import {Docker} from '../docker/docker';
import {GitHub} from '../github';
import {Cache} from '../cache.js';
import {Context} from '../context.js';
import {Docker} from '../docker/docker.js';
import {GitHub} from '../github/github.js';
import {DownloadVersion} from '../types/compose/compose';
import {GitHubRelease} from '../types/github';
import {DownloadVersion} from '../types/compose/compose.js';
import {GitHubRelease} from '../types/github/github.js';
export interface InstallOpts {
standalone?: boolean;

View File

@@ -18,9 +18,6 @@ import fs from 'fs';
import os from 'os';
import path from 'path';
import * as tmp from 'tmp';
import * as github from '@actions/github';
import {GitHub} from './github';
export class Context {
private static readonly _tmpDir = fs.mkdtempSync(path.join(Context.ensureDirExists(process.env.RUNNER_TEMP || os.tmpdir()), 'docker-actions-toolkit-'));
@@ -37,25 +34,4 @@ export class Context {
public static tmpName(options?: tmp.TmpNameOptions): string {
return tmp.tmpNameSync(options);
}
public static gitRef(): string {
return Context.parseGitRef(github.context.ref, github.context.sha);
}
public static parseGitRef(ref: string, sha: string): string {
const setPullRequestHeadRef: boolean = !!(process.env.DOCKER_DEFAULT_GIT_CONTEXT_PR_HEAD_REF && process.env.DOCKER_DEFAULT_GIT_CONTEXT_PR_HEAD_REF === 'true');
if (sha && ref && !ref.startsWith('refs/')) {
ref = `refs/heads/${ref}`;
}
if (sha && !ref.startsWith(`refs/pull/`)) {
ref = sha;
} else if (ref.startsWith(`refs/pull/`) && setPullRequestHeadRef) {
ref = ref.replace(/\/merge$/g, '/head');
}
return ref;
}
public static gitContext(): string {
return `${GitHub.serverURL}/${github.context.repo.owner}/${github.context.repo.repo}.git#${Context.gitRef()}`;
}
}

View File

@@ -17,9 +17,9 @@
import * as core from '@actions/core';
import {BUNDLE_V03_MEDIA_TYPE, SerializedBundle} from '@sigstore/bundle';
import {Exec} from '../exec';
import {Exec} from '../exec.js';
import * as semver from 'semver';
import {MEDIATYPE_EMPTY_JSON_V1} from '../types/oci/mediatype';
import {MEDIATYPE_EMPTY_JSON_V1} from '../types/oci/mediatype.js';
export interface CosignOpts {
binPath?: string;

View File

@@ -19,23 +19,22 @@ import os from 'os';
import path from 'path';
import * as core from '@actions/core';
import * as tc from '@actions/tool-cache';
import {bundleFromJSON, SerializedBundle} from '@sigstore/bundle';
import * as tuf from '@sigstore/tuf';
import {toSignedEntity, toTrustMaterial, Verifier} from '@sigstore/verify';
import * as semver from 'semver';
import * as util from 'util';
import {Buildx} from '../buildx/buildx';
import {Cache} from '../cache';
import {Context} from '../context';
import {Exec} from '../exec';
import {Git} from '../git';
import {GitHub} from '../github';
import {Util} from '../util';
import {Buildx} from '../buildx/buildx.js';
import {Cache} from '../cache.js';
import {Context} from '../context.js';
import {Exec} from '../exec.js';
import {Git} from '../git.js';
import {GitHub} from '../github/github.js';
import {Sigstore} from '../sigstore/sigstore.js';
import {Util} from '../util.js';
import {DownloadVersion} from '../types/cosign/cosign';
import {GitHubRelease} from '../types/github';
import {dockerfileContent} from './dockerfile';
import {DownloadVersion} from '../types/cosign/cosign.js';
import {GitHubRelease} from '../types/github/github.js';
import {dockerfileContent} from './dockerfile.js';
import {SEARCH_URL} from '../types/sigstore/sigstore.js';
export interface DownloadOpts {
version: string;
@@ -47,15 +46,18 @@ export interface DownloadOpts {
export interface InstallOpts {
githubToken?: string;
buildx?: Buildx;
sigstore?: Sigstore;
}
export class Install {
private readonly githubToken: string | undefined;
private readonly buildx: Buildx;
private readonly sigstore: Sigstore;
constructor(opts?: InstallOpts) {
this.githubToken = opts?.githubToken || process.env.GITHUB_TOKEN;
this.buildx = opts?.buildx || new Buildx();
this.sigstore = opts?.sigstore || new Sigstore();
}
public async download(opts: DownloadOpts): Promise<string> {
@@ -196,27 +198,12 @@ export class Install {
const bundlePath = await tc.downloadTool(bundleURL, undefined, this.githubToken);
core.debug(`Install.verifySignature bundlePath: ${bundlePath}`);
core.info(`Verifying keyless verification bundle signature`);
const parsedBundle = JSON.parse(fs.readFileSync(bundlePath, 'utf-8')) as SerializedBundle;
const bundle = bundleFromJSON(parsedBundle);
const verifyResult = await this.sigstore.verifyArtifact(cosignBinPath, bundlePath, {
subjectAlternativeName: 'keyless@projectsigstore.iam.gserviceaccount.com',
issuer: 'https://accounts.google.com'
});
core.info(`Fetching Sigstore TUF trusted root metadata`);
const trustedRoot = await tuf.getTrustedRoot();
const trustMaterial = toTrustMaterial(trustedRoot);
try {
core.info(`Verifying cosign binary signature`);
const signedEntity = toSignedEntity(bundle, fs.readFileSync(cosignBinPath));
const verifier = new Verifier(trustMaterial);
const signer = verifier.verify(signedEntity, {
subjectAlternativeName: 'keyless@projectsigstore.iam.gserviceaccount.com',
extensions: {issuer: 'https://accounts.google.com'}
});
core.debug(`Install.verifySignature signer: ${JSON.stringify(signer)}`);
core.info(`Cosign binary signature verified!`);
} catch (err) {
throw new Error(`Failed to verify cosign binary signature: ${err}`);
}
core.info(`Cosign binary signature verified! ${verifyResult.tlogID ? `${SEARCH_URL}?logIndex=${verifyResult.tlogID}` : ''}`);
}
private filename(): string {

View File

@@ -15,7 +15,7 @@
*/
import fs from 'fs';
import {Context} from '../context';
import {Context} from '../context.js';
export const setupDockerWinPs1 = (): string => {
return get('docker-setup-win.ps1', setupDockerWinPs1Data);

View File

@@ -21,12 +21,12 @@ import * as core from '@actions/core';
import {ExecOptions, ExecOutput} from '@actions/exec';
import * as io from '@actions/io';
import {Context} from '../context';
import {Cache} from '../cache';
import {Exec} from '../exec';
import {Util} from '../util';
import {Context} from '../context.js';
import {Cache} from '../cache.js';
import {Exec} from '../exec.js';
import {Util} from '../util.js';
import {ConfigFile, ContextInfo} from '../types/docker/docker';
import {ConfigFile, ContextInfo} from '../types/docker/docker.js';
export class Docker {
static get configDir(): string {

View File

@@ -25,18 +25,18 @@ import * as core from '@actions/core';
import * as io from '@actions/io';
import * as tc from '@actions/tool-cache';
import {Context} from '../context';
import {Docker} from './docker';
import {Exec} from '../exec';
import {GitHub} from '../github';
import {Regctl} from '../regclient/regctl';
import {Undock} from '../undock/undock';
import {Util} from '../util';
import {Context} from '../context.js';
import {Docker} from './docker.js';
import {Exec} from '../exec.js';
import {GitHub} from '../github/github.js';
import {Regctl} from '../regclient/regctl.js';
import {Undock} from '../undock/undock.js';
import {Util} from '../util.js';
import {limaYamlData, dockerServiceLogsPs1, setupDockerWinPs1} from './assets';
import {limaYamlData, dockerServiceLogsPs1, setupDockerWinPs1} from './assets.js';
import {GitHubRelease} from '../types/github';
import {Image} from '../types/oci/config';
import {GitHubRelease} from '../types/github/github.js';
import {Image} from '../types/oci/config.js';
export interface InstallSourceImage {
type: 'image';

View File

@@ -18,7 +18,7 @@ import * as core from '@actions/core';
import * as httpm from '@actions/http-client';
import {HttpCodes} from '@actions/http-client';
import {RepositoryRequest, RepositoryResponse, RepositoryTagsRequest, RepositoryTagsResponse, TokenRequest, TokenResponse, UpdateRepoDescriptionRequest} from './types/dockerhub';
import {RepositoryRequest, RepositoryResponse, RepositoryTagsRequest, RepositoryTagsResponse, TokenRequest, TokenResponse, UpdateRepoDescriptionRequest} from './types/dockerhub.js';
export interface DockerHubOpts {
credentials: TokenRequest;

View File

@@ -15,18 +15,15 @@
*/
import * as core from '@actions/core';
import {Octokit} from '@octokit/core';
import {restEndpointMethods} from '@octokit/plugin-rest-endpoint-methods';
import * as github from '@actions/github';
import {Exec} from './exec.js';
import {GitHub} from './github/github.js';
import {Exec} from './exec';
import {GitHub} from './github';
import {Context} from '@actions/github/lib/context';
import {Context as GitContext} from './types/git';
export type GitContext = typeof github.context;
export class Git {
public static async context(): Promise<GitContext> {
const ctx = new Context();
const ctx = {...github.context} as GitContext;
ctx.ref = await Git.ref();
ctx.sha = await Git.fullCommit();
return ctx;
@@ -47,9 +44,9 @@ export class Git {
// if we have a token and this is a GitHub repo we can use the GitHub API
if (token && repoMatch) {
core.setSecret(token);
const octokit = new (Octokit.plugin(restEndpointMethods).defaults({
const octokit = github.getOctokit(token, {
baseUrl: GitHub.apiURL
}))({auth: token});
});
const [owner, repoName] = repoMatch.slice(1, 3);
try {
return (

View File

@@ -1,416 +0,0 @@
/**
* Copyright 2023 actions-toolkit authors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import crypto from 'crypto';
import fs from 'fs';
import he from 'he';
import {dump as yamldump} from 'js-yaml';
import os from 'os';
import path from 'path';
import {CreateArtifactRequest, FinalizeArtifactRequest, StringValue} from '@actions/artifact/lib/generated';
import {internalArtifactTwirpClient} from '@actions/artifact/lib/internal/shared/artifact-twirp-client';
import {isGhes} from '@actions/artifact/lib/internal/shared/config';
import {getBackendIdsFromToken} from '@actions/artifact/lib/internal/shared/util';
import {getExpiration} from '@actions/artifact/lib/internal/upload/retention';
import {InvalidResponseError, NetworkError} from '@actions/artifact';
import * as core from '@actions/core';
import {SummaryTableCell} from '@actions/core/lib/summary';
import * as github from '@actions/github';
import {GitHub as Octokit} from '@actions/github/lib/utils';
import {Context} from '@actions/github/lib/context';
import * as httpm from '@actions/http-client';
import {TransferProgressEvent} from '@azure/core-rest-pipeline';
import {BlobClient, BlobHTTPHeaders} from '@azure/storage-blob';
import {jwtDecode, JwtPayload} from 'jwt-decode';
import {Util} from './util';
import {BuildSummaryOpts, GitHubActionsRuntimeToken, GitHubActionsRuntimeTokenAC, GitHubContentOpts, GitHubRelease, GitHubRepo, UploadArtifactOpts, UploadArtifactResponse} from './types/github';
export interface GitHubOpts {
token?: string;
}
export class GitHub {
private readonly githubToken?: string;
public readonly octokit: InstanceType<typeof Octokit>;
constructor(opts?: GitHubOpts) {
this.githubToken = opts?.token || process.env.GITHUB_TOKEN;
this.octokit = github.getOctokit(`${this.githubToken}`);
}
public repoData(): Promise<GitHubRepo> {
return this.octokit.rest.repos.get({...github.context.repo}).then(response => response.data as GitHubRepo);
}
public async releases(name: string, opts: GitHubContentOpts): Promise<Record<string, GitHubRelease>> {
let releases: Record<string, GitHubRelease>;
try {
// try without token first
releases = await this.releasesRaw(name, opts);
} catch (error) {
if (!this.githubToken) {
throw error;
}
// try with token
releases = await this.releasesRaw(name, opts, this.githubToken);
}
return releases;
}
public async releasesRaw(name: string, opts: GitHubContentOpts, token?: string): Promise<Record<string, GitHubRelease>> {
const url = `https://raw.githubusercontent.com/${opts.owner}/${opts.repo}/${opts.ref}/${opts.path}`;
const http: httpm.HttpClient = new httpm.HttpClient('docker-actions-toolkit');
// prettier-ignore
const httpResp: httpm.HttpClientResponse = await http.get(url, token ? {
Authorization: `token ${token}`
} : undefined);
const dt = await httpResp.readBody();
const statusCode = httpResp.message.statusCode || 500;
if (statusCode >= 400) {
throw new Error(`Failed to get ${name} releases from ${url} with status code ${statusCode}: ${dt}`);
}
return <Record<string, GitHubRelease>>JSON.parse(dt);
}
static get context(): Context {
return github.context;
}
static get serverURL(): string {
return process.env.GITHUB_SERVER_URL || 'https://github.com';
}
static get apiURL(): string {
return process.env.GITHUB_API_URL || 'https://api.github.com';
}
static get isGHES(): boolean {
// FIXME: we are using the function from GitHub artifact module but should
// be within core module when available.
return isGhes();
}
static get repository(): string {
return `${github.context.repo.owner}/${github.context.repo.repo}`;
}
static get workspace(): string {
return process.env.GITHUB_WORKSPACE || process.cwd();
}
static get runId(): number {
return process.env.GITHUB_RUN_ID ? +process.env.GITHUB_RUN_ID : github.context.runId;
}
static get runAttempt(): number {
// TODO: runAttempt is not yet part of github.context but will be in a
// future release of @actions/github package: https://github.com/actions/toolkit/commit/faa425440f86f9c16587a19dfb59491253a2c92a
return process.env.GITHUB_RUN_ATTEMPT ? +process.env.GITHUB_RUN_ATTEMPT : 1;
}
public static workflowRunURL(setAttempts?: boolean): string {
return `${GitHub.serverURL}/${GitHub.repository}/actions/runs/${GitHub.runId}${setAttempts ? `/attempts/${GitHub.runAttempt}` : ''}`;
}
static get actionsRuntimeToken(): GitHubActionsRuntimeToken | undefined {
const token = process.env['ACTIONS_RUNTIME_TOKEN'] || '';
return token ? (jwtDecode<JwtPayload>(token) as GitHubActionsRuntimeToken) : undefined;
}
public static async printActionsRuntimeTokenACs() {
let jwt: GitHubActionsRuntimeToken | undefined;
try {
jwt = GitHub.actionsRuntimeToken;
} catch (e) {
throw new Error(`Cannot parse GitHub Actions Runtime Token: ${e.message}`);
}
if (!jwt) {
throw new Error(`ACTIONS_RUNTIME_TOKEN not set`);
}
try {
<Array<GitHubActionsRuntimeTokenAC>>JSON.parse(`${jwt.ac}`).forEach(ac => {
let permission: string;
switch (ac.Permission) {
case 1:
permission = 'read';
break;
case 2:
permission = 'write';
break;
case 3:
permission = 'read/write';
break;
default:
permission = `unimplemented (${ac.Permission})`;
}
core.info(`${ac.Scope}: ${permission}`);
});
} catch (e) {
throw new Error(`Cannot parse GitHub Actions Runtime Token ACs: ${e.message}`);
}
}
public static async uploadArtifact(opts: UploadArtifactOpts): Promise<UploadArtifactResponse> {
if (GitHub.isGHES) {
throw new Error('@actions/artifact v2.0.0+ is currently not supported on GHES.');
}
const artifactName = path.basename(opts.filename);
const backendIds = getBackendIdsFromToken();
const artifactClient = internalArtifactTwirpClient();
core.info(`Uploading ${artifactName} to blob storage`);
const createArtifactReq: CreateArtifactRequest = {
workflowRunBackendId: backendIds.workflowRunBackendId,
workflowJobRunBackendId: backendIds.workflowJobRunBackendId,
name: artifactName,
version: 4
};
const expiresAt = getExpiration(opts?.retentionDays);
if (expiresAt) {
createArtifactReq.expiresAt = expiresAt;
}
const createArtifactResp = await artifactClient.CreateArtifact(createArtifactReq);
if (!createArtifactResp.ok) {
throw new InvalidResponseError('cannot create artifact client');
}
let uploadByteCount = 0;
const blobClient = new BlobClient(createArtifactResp.signedUploadUrl);
const blockBlobClient = blobClient.getBlockBlobClient();
const headers: BlobHTTPHeaders = {
blobContentDisposition: `attachment; filename="${artifactName}"`
};
if (opts.mimeType) {
headers.blobContentType = opts.mimeType;
}
core.debug(`Upload headers: ${JSON.stringify(headers)}`);
try {
core.info('Beginning upload of artifact content to blob storage');
await blockBlobClient.uploadFile(opts.filename, {
blobHTTPHeaders: headers,
onProgress: (progress: TransferProgressEvent): void => {
core.info(`Uploaded bytes ${progress.loadedBytes}`);
uploadByteCount = progress.loadedBytes;
}
});
} catch (error) {
if (NetworkError.isNetworkErrorCode(error?.code)) {
throw new NetworkError(error?.code);
}
throw error;
}
core.info('Finished uploading artifact content to blob storage!');
const sha256Hash = crypto.createHash('sha256').update(fs.readFileSync(opts.filename)).digest('hex');
core.info(`SHA256 hash of uploaded artifact is ${sha256Hash}`);
const finalizeArtifactReq: FinalizeArtifactRequest = {
workflowRunBackendId: backendIds.workflowRunBackendId,
workflowJobRunBackendId: backendIds.workflowJobRunBackendId,
name: artifactName,
size: uploadByteCount ? uploadByteCount.toString() : '0'
};
if (sha256Hash) {
finalizeArtifactReq.hash = StringValue.create({
value: `sha256:${sha256Hash}`
});
}
core.info(`Finalizing artifact upload`);
const finalizeArtifactResp = await artifactClient.FinalizeArtifact(finalizeArtifactReq);
if (!finalizeArtifactResp.ok) {
throw new InvalidResponseError('Cannot finalize artifact upload');
}
const artifactId = BigInt(finalizeArtifactResp.artifactId);
core.info(`Artifact successfully finalized (${artifactId})`);
const artifactURL = `${GitHub.workflowRunURL()}/artifacts/${artifactId}`;
core.info(`Artifact download URL: ${artifactURL}`);
return {
id: Number(artifactId),
filename: artifactName,
size: uploadByteCount,
url: artifactURL
};
}
public static async writeBuildSummary(opts: BuildSummaryOpts): Promise<void> {
// can't use original core.summary.addLink due to the need to make
// EOL optional
const addLink = function (text: string, url: string, addEOL = false): string {
return `<a href="${url}">${text}</a>` + (addEOL ? os.EOL : '');
};
const refsSize = opts.exportRes.refs.length;
const firstRef = refsSize > 0 ? opts.exportRes.refs?.[0] : undefined;
const firstSummary = firstRef ? opts.exportRes.summaries?.[firstRef] : undefined;
const dbcAccount = opts.driver === 'cloud' && opts.endpoint ? opts.endpoint?.replace(/^cloud:\/\//, '').split('/')[0] : undefined;
const sum = core.summary.addHeading('Docker Build summary', 2);
if (dbcAccount && refsSize === 1 && firstRef && firstSummary) {
const buildURL = GitHub.formatDBCBuildURL(dbcAccount, firstRef, firstSummary.defaultPlatform);
// prettier-ignore
sum.addRaw(`<p>`)
.addRaw(`For a detailed look at the build, you can check the results at:`)
.addRaw('</p>')
.addRaw(`<p>`)
.addRaw(`:whale: ${addLink(`<strong>${buildURL}</strong>`, buildURL)}`)
.addRaw(`</p>`);
}
if (opts.uploadRes) {
// we just need the last two parts of the URL as they are always relative
// to the workflow run URL otherwise URL could be broken if GitHub
// repository name is part of a secret value used in the workflow. e.g.:
// artifact: https://github.com/docker/actions-toolkit/actions/runs/9552208295/artifacts/1609622746
// workflow: https://github.com/docker/actions-toolkit/actions/runs/9552208295
// https://github.com/docker/actions-toolkit/issues/367
const artifactRelativeURL = `./${GitHub.runId}/${opts.uploadRes.url.split('/').slice(-2).join('/')}`;
if (dbcAccount && refsSize === 1) {
// prettier-ignore
sum.addRaw(`<p>`)
.addRaw(`You can also download the following build record archive and import it into Docker Desktop's Builds view. `)
.addBreak()
.addRaw(`Build records include details such as timing, dependencies, results, logs, traces, and other information about a build. `)
.addRaw(addLink('Learn more', 'https://www.docker.com/blog/new-beta-feature-deep-dive-into-github-actions-docker-builds-with-docker-desktop/?utm_source=github&utm_medium=actions'))
.addRaw('</p>')
} else {
// prettier-ignore
sum.addRaw(`<p>`)
.addRaw(`For a detailed look at the build, download the following build record archive and import it into Docker Desktop's Builds view. `)
.addBreak()
.addRaw(`Build records include details such as timing, dependencies, results, logs, traces, and other information about a build. `)
.addRaw(addLink('Learn more', 'https://www.docker.com/blog/new-beta-feature-deep-dive-into-github-actions-docker-builds-with-docker-desktop/?utm_source=github&utm_medium=actions'))
.addRaw('</p>')
}
// prettier-ignore
sum.addRaw(`<p>`)
.addRaw(`:arrow_down: ${addLink(`<strong>${Util.stringToUnicodeEntities(opts.uploadRes.filename)}</strong>`, artifactRelativeURL)} (${Util.formatFileSize(opts.uploadRes.size)} - includes <strong>${refsSize} build record${refsSize > 1 ? 's' : ''}</strong>)`)
.addRaw(`</p>`);
} else if (opts.exportRes.summaries) {
// prettier-ignore
sum.addRaw(`<p>`)
.addRaw(`The following table provides a brief summary of your build.`)
.addBreak()
.addRaw(`For a detailed look at the build, including timing, dependencies, results, logs, traces, and other information, consider enabling the export of the build record so you can import it into Docker Desktop's Builds view. `)
.addRaw(addLink('Learn more', 'https://www.docker.com/blog/new-beta-feature-deep-dive-into-github-actions-docker-builds-with-docker-desktop/?utm_source=github&utm_medium=actions'))
.addRaw(`</p>`);
}
// Feedback survey
sum.addRaw(`<p>`).addRaw(`Find this useful? `).addRaw(addLink('Let us know', 'https://docs.docker.com/feedback/gha-build-summary')).addRaw('</p>');
if (opts.exportRes.summaries) {
// Preview
sum.addRaw('<p>');
const summaryTableData: Array<Array<SummaryTableCell>> = [
// prettier-ignore
[
{header: true, data: 'ID'},
{header: true, data: 'Name'},
{header: true, data: 'Status'},
{header: true, data: 'Cached'},
{header: true, data: 'Duration'},
...(dbcAccount && refsSize > 1 ? [{header: true, data: 'Build result URL'}] : [])
]
];
let buildError: string | undefined;
for (const ref in opts.exportRes.summaries) {
if (Object.prototype.hasOwnProperty.call(opts.exportRes.summaries, ref)) {
const summary = opts.exportRes.summaries[ref];
// prettier-ignore
summaryTableData.push([
{data: `<code>${ref.substring(0, 6).toUpperCase()}</code>`},
{data: `<strong>${Util.stringToUnicodeEntities(summary.name)}</strong>`},
{data: `${summary.status === 'completed' ? ':white_check_mark:' : summary.status === 'canceled' ? ':no_entry_sign:' : ':x:'} ${summary.status}`},
{data: `${summary.numCachedSteps > 0 ? Math.round((summary.numCachedSteps / summary.numTotalSteps) * 100) : 0}%`},
{data: summary.duration},
...(dbcAccount && refsSize > 1 ? [{data: addLink(':whale: Open', GitHub.formatDBCBuildURL(dbcAccount, ref, summary.defaultPlatform))}] : [])
]);
if (summary.error) {
buildError = summary.error;
}
}
}
sum.addTable([...summaryTableData]);
sum.addRaw(`</p>`);
// Build error
if (buildError) {
sum.addRaw(`<blockquote>`);
if (Util.countLines(buildError) > 10) {
// prettier-ignore
sum
.addRaw(`<details><summary><strong>Error</strong></summary>`)
.addCodeBlock(he.encode(buildError), 'text')
.addRaw(`</details>`);
} else {
// prettier-ignore
sum
.addRaw(`<strong>Error</strong>`)
.addBreak()
.addRaw(`<p>`)
.addCodeBlock(he.encode(buildError), 'text')
.addRaw(`</p>`);
}
sum.addRaw(`</blockquote>`);
}
}
// Build inputs
if (opts.inputs) {
// prettier-ignore
sum.addRaw(`<details><summary><strong>Build inputs</strong></summary>`)
.addCodeBlock(
yamldump(opts.inputs, {
indent: 2,
lineWidth: -1
}), 'yaml'
)
.addRaw(`</details>`);
}
// Bake definition
if (opts.bakeDefinition) {
// prettier-ignore
sum.addRaw(`<details><summary><strong>Bake definition</strong></summary>`)
.addCodeBlock(JSON.stringify(opts.bakeDefinition, null, 2), 'json')
.addRaw(`</details>`);
}
core.info(`Writing summary`);
await sum.addSeparator().write();
}
private static formatDBCBuildURL(account: string, ref: string, platform?: string): string {
return `https://app.docker.com/build/accounts/${account}/builds/${(platform ?? 'linux/amd64').replace('/', '-')}/${ref}`;
}
}

Some files were not shown because too many files have changed in this diff Show More