Compare commits

...

106 Commits

Author SHA1 Message Date
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
129 changed files with 4019 additions and 8192 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,301 @@
{
"latest": {
"id": 278817585,
"tag_name": "v0.31.0",
"html_url": "https://github.com/docker/buildx/releases/tag/v0.31.0",
"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.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"
]
},
"v0.31.0": {
"id": 278817585,
"tag_name": "v0.31.0",
"html_url": "https://github.com/docker/buildx/releases/tag/v0.31.0",
"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.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"
]
},
"edge": {
"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.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,8 +1,14 @@
{
"latest": {
"id": 280041206,
"tag_name": "docker-v29.2.0",
"html_url": "https://github.com/moby/moby/releases/tag/docker-v29.2.0",
"id": 282275652,
"tag_name": "docker-v29.2.1",
"html_url": "https://github.com/moby/moby/releases/tag/docker-v29.2.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": {
@@ -12,9 +18,9 @@
"assets": []
},
"edge": {
"id": 280041206,
"tag_name": "docker-v29.2.0",
"html_url": "https://github.com/moby/moby/releases/tag/docker-v29.2.0",
"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-rc.2": {

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,7 +21,6 @@ jobs:
node_version:
- 24
- 20
- 18
steps:
-
name: Build

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

@@ -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

@@ -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

@@ -15,8 +15,8 @@ on:
env:
NODE_VERSION: "20"
BUILDX_VERSION: "v0.31.0"
BUILDKIT_IMAGE: "moby/buildkit:v0.27.0"
BUILDX_VERSION: "v0.32.0-rc1"
BUILDKIT_IMAGE: "moby/buildkit:v0.28.0-rc1"
jobs:
test:
@@ -30,7 +30,6 @@ jobs:
node_version:
- 24
- 20
- 18
steps:
-
name: Checkout
@@ -44,6 +43,7 @@ jobs:
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
NODE_VERSION: ${{ matrix.node_version }}
DOCKER_BUILD_SUMMARY: false
-
name: Check coverage
run: |
@@ -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

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',

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;
});
@@ -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', () => {
@@ -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();
}
});
@@ -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');

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;
});

View File

@@ -14,26 +14,26 @@
* 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';
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;
});
@@ -191,7 +191,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);
}
});
@@ -206,7 +206,7 @@ describe('resolveSecret', () => {
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);
}
});
@@ -348,10 +348,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 %p 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'], {

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
});
@@ -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')

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-'));

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');

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-'));
@@ -38,7 +39,7 @@ describe('download', () => {
])(
'acquires %p of buildx (standalone: %p)', 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) {
@@ -57,7 +58,7 @@ describe('download', () => {
])(
'acquires %p 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);
@@ -68,7 +69,7 @@ describe('download', () => {
])(
'acquires %p 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
});

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-'));
@@ -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,23 +14,23 @@
* limitations under the License.
*/
import {describe, expect, jest, it, afterEach, beforeEach, test} from '@jest/globals';
import {describe, expect, vi, it, afterEach, beforeEach, 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 {Context} from '../src/context.js';
const tmpDir = fs.mkdtempSync(path.join(process.env.TEMP || os.tmpdir(), 'context-'));
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 @@ describe('gitRef', () => {
describe('parseGitRef', () => {
const originalEnv = process.env;
beforeEach(() => {
jest.resetModules();
vi.resetModules();
process.env = {
...originalEnv,
DOCKER_GIT_CONTEXT_PR_HEAD_REF: ''

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'], {

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-'));
@@ -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-'));
@@ -60,8 +61,8 @@ describe('download', () => {
[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');
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');
});
@@ -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);
});

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-'));
@@ -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,13 +14,13 @@
* 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
@@ -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'], {

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-'));
@@ -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'], {

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 () => {
@@ -326,10 +326,10 @@ 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);
}
});

View File

@@ -15,8 +15,8 @@
# limitations under the License.
ARG NODE_VERSION=20
ARG DOCKER_VERSION=28.3
ARG BUILDX_VERSION=0.31.0
ARG DOCKER_VERSION=29.2
ARG BUILDX_VERSION=0.32.0-rc1
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,17 +42,14 @@
"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.0",
"@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",
@@ -67,35 +61,30 @@
"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": "^20.19.35",
"@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;

View File

@@ -19,14 +19,14 @@ import path from 'path';
import * as core from '@actions/core';
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} 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;
@@ -310,9 +310,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

@@ -21,14 +21,14 @@ 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 {Docker} from '../docker/docker.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;

View File

@@ -14,13 +14,13 @@
* limitations under the License.
*/
import {Buildx} from './buildx';
import {Exec} from '../exec';
import {Buildx} from './buildx.js';
import {Exec} from '../exec.js';
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 {Manifest as ImageToolsManifest} from '../types/buildx/imagetools.js';
import {Image} from '../types/oci/config.js';
import {Descriptor, Platform} from '../types/oci/descriptor.js';
import {Digest} from '../types/oci/digest.js';
export interface ImageToolsOpts {
buildx?: Buildx;

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

@@ -20,7 +20,7 @@ import path from 'path';
import * as tmp from 'tmp';
import * as github from '@actions/github';
import {GitHub} from './github';
import {GitHub} from './github/github.js';
export class Context {
private static readonly _tmpDir = fs.mkdtempSync(path.join(Context.ensureDirExists(process.env.RUNNER_TEMP || os.tmpdir()), 'docker-actions-toolkit-'));

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}`;
}
}

56
src/github/artifact.ts Normal file
View File

@@ -0,0 +1,56 @@
/**
* 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 'fs';
import path from 'path';
import {DefaultArtifactClient, InvalidResponseError} from '@actions/artifact';
import * as core from '@actions/core';
import {UploadOpts, UploadResponse} from '../types/github/artifact.js';
import {GitHub} from './github.js';
export class GitHubArtifact {
public static async upload(opts: UploadOpts): Promise<UploadResponse> {
if (GitHub.isGHES) {
throw new Error('@actions/artifact v2.0.0+ is currently not supported on GHES.');
}
const artifactName = path.basename(opts.filename);
const artifactClient = new DefaultArtifactClient();
core.info(`Uploading ${artifactName} as an artifact`);
const rootDirectory = path.dirname(opts.filename);
const response = await artifactClient.uploadArtifact(artifactName, [opts.filename], rootDirectory, {
retentionDays: opts.retentionDays,
skipArchive: true
});
if (!response.id) {
throw new InvalidResponseError('Cannot upload artifact');
}
const size = response.size ?? fs.statSync(opts.filename).size;
const artifactURL = `${GitHub.workflowRunURL()}/artifacts/${response.id}`;
core.info(`Artifact download URL: ${artifactURL}`);
return {
id: response.id,
filename: artifactName,
digest: response.digest || '',
size,
url: artifactURL
};
}
}

154
src/github/github.ts Normal file
View File

@@ -0,0 +1,154 @@
/**
* 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 * as core from '@actions/core';
import * as github from '@actions/github';
import * as httpm from '@actions/http-client';
import {jwtDecode, JwtPayload} from 'jwt-decode';
import {GitHubActionsRuntimeToken, GitHubActionsRuntimeTokenAC, GitHubContentOpts, GitHubRelease, GitHubRepo} from '../types/github/github.js';
export interface GitHubOpts {
token?: string;
}
export class GitHub {
private readonly githubToken?: string;
public readonly octokit: ReturnType<typeof github.getOctokit>;
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(): typeof github.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';
}
// Can't use the isGhes() func from @actions/artifact due to @actions/artifact/lib/internal/shared/config
// being internal since ESM-only packages do not support internal exports.
// https://github.com/actions/toolkit/blob/8351a5d84d862813d1bb8bdeef87b215f8a946f9/packages/artifact/src/internal/shared/config.ts#L27
static get isGHES(): boolean {
const ghURL = new URL(GitHub.serverURL);
const hostname = ghURL.hostname.trimEnd().toUpperCase();
const isGitHubHost = hostname === 'GITHUB.COM';
const isGitHubEnterpriseCloudHost = hostname.endsWith('.GHE.COM');
const isLocalHost = hostname.endsWith('.LOCALHOST');
return !isGitHubHost && !isGitHubEnterpriseCloudHost && !isLocalHost;
}
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}`);
}
}
}

182
src/github/summary.ts Normal file
View File

@@ -0,0 +1,182 @@
/**
* 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 he from 'he';
import {dump as yamldump} from 'js-yaml';
import os from 'os';
import * as core from '@actions/core';
import {GitHub} from './github.js';
import {Util} from '../util.js';
import {BuildSummaryOpts, SummaryTableCell} from '../types/github/summary.js';
export class GitHubSummary {
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 = GitHubSummary.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', GitHubSummary.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}`;
}
}

View File

@@ -16,7 +16,7 @@
import * as core from '@actions/core';
import {Cache} from './cache';
import {Cache} from './cache.js';
const isPost = !!process.env['STATE_isPost'];
if (!isPost) {

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