Compare commits
122 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
9e446b0b90 | ||
|
|
d682d6d4a5 | ||
|
|
ca5ab569e5 | ||
|
|
5b2d914820 | ||
|
|
b873721f89 | ||
|
|
c975cd6494 | ||
|
|
a0a3952b2d | ||
|
|
4af1413de8 | ||
|
|
83a4cb6e7f | ||
|
|
9edbb73678 | ||
|
|
6fc9119f7e | ||
|
|
b2caa9ae45 | ||
|
|
80446a55b4 | ||
|
|
c7c816aa2f | ||
|
|
3f87521aad | ||
|
|
c186677904 | ||
|
|
e5d20b9b8b | ||
|
|
a45bcd1296 | ||
|
|
26ff71b24e | ||
|
|
b1b6c30312 | ||
|
|
78f85cbf92 | ||
|
|
1b45318512 | ||
|
|
aa6e45fd98 | ||
|
|
4750efa111 | ||
|
|
aafdd47b20 | ||
|
|
6e348fa8af | ||
|
|
ed4752598a | ||
|
|
7ad1857b6c | ||
|
|
0973a1ac76 | ||
|
|
2b2119e051 | ||
|
|
b6a3cad225 | ||
|
|
260dd0518b | ||
|
|
cb8840fbce | ||
|
|
3692a3c56f | ||
|
|
8a60689b00 | ||
|
|
14b5eee617 | ||
|
|
fa21647770 | ||
|
|
c3c1213116 | ||
|
|
5d1e3079eb | ||
|
|
ce0510c77f | ||
|
|
c21ad821b8 | ||
|
|
5e783cc801 | ||
|
|
03628ab393 | ||
|
|
f0766fff61 | ||
|
|
dee27d76a2 | ||
|
|
f96fcb3238 | ||
|
|
91e04f6b63 | ||
|
|
56778fba0b | ||
|
|
62ceaab8d4 | ||
|
|
18925ea1d8 | ||
|
|
b46fe214a0 | ||
|
|
d5f2e23c86 | ||
|
|
757ec820d8 | ||
|
|
bfed47a87c | ||
|
|
142e6ec554 | ||
|
|
4d312a45da | ||
|
|
3d7c390e08 | ||
|
|
bb7f6204cb | ||
|
|
517b797fc8 | ||
|
|
c6c363b02a | ||
|
|
c790a5b549 | ||
|
|
148117ec54 | ||
|
|
57aacc319c | ||
|
|
e169fb346d | ||
|
|
4748d57f98 | ||
|
|
61eb950122 | ||
|
|
ceba4f1fba | ||
|
|
386d77d22d | ||
|
|
3cd1a9db9b | ||
|
|
b4a6b692a6 | ||
|
|
0484ca443a | ||
|
|
37d8063bad | ||
|
|
7878bd5132 | ||
|
|
4d959f4dfa | ||
|
|
46e9ae7c00 | ||
|
|
a8558c570f | ||
|
|
0def5befd0 | ||
|
|
195f819e18 | ||
|
|
abcde0b72d | ||
|
|
539653d6fd | ||
|
|
3ce99f0184 | ||
|
|
cf27b7414a | ||
|
|
461be748b1 | ||
|
|
7b49b8764b | ||
|
|
ddf4131723 | ||
|
|
37a6f26c7e | ||
|
|
958f42fe37 | ||
|
|
dfebb2fe55 | ||
|
|
e3c69a214e | ||
|
|
a1b45a7b5f | ||
|
|
b7c282e16f | ||
|
|
2ecd0682d0 | ||
|
|
ac634d2f0a | ||
|
|
72bdaca3a5 | ||
|
|
13ca90c5d0 | ||
|
|
17e08b98a8 | ||
|
|
89e14b0d85 | ||
|
|
d830716b30 | ||
|
|
0969a99659 | ||
|
|
ae6b2a8dc9 | ||
|
|
537174131a | ||
|
|
2806b0ceaf | ||
|
|
466f0611ff | ||
|
|
13d565c67f | ||
|
|
4fefc18a15 | ||
|
|
66d355cbed | ||
|
|
06cdb9490a | ||
|
|
2617546094 | ||
|
|
9348f81855 | ||
|
|
3f7be6d97d | ||
|
|
8a49a6ea9c | ||
|
|
faa5b5bf22 | ||
|
|
f64486ace9 | ||
|
|
dd7585591e | ||
|
|
e278a8ff7f | ||
|
|
a8f3950008 | ||
|
|
16a313e50b | ||
|
|
f57515d812 | ||
|
|
b2d68b3506 | ||
|
|
6785818572 | ||
|
|
ac0e0b50d5 | ||
|
|
20a43cb510 |
228
.github/buildx-lab-releases.json
vendored
228
.github/buildx-lab-releases.json
vendored
@@ -1,61 +1,86 @@
|
|||||||
{
|
{
|
||||||
"latest": {
|
"latest": {
|
||||||
"id": 269523829,
|
"id": 285373366,
|
||||||
"tag_name": "v0.30.1-desktop.2",
|
"tag_name": "v0.31.1-desktop.1",
|
||||||
"html_url": "https://github.com/docker/buildx-desktop/releases/tag/v0.30.1-desktop.2",
|
"html_url": "https://github.com/docker/buildx-desktop/releases/tag/v0.31.1-desktop.1",
|
||||||
"assets": [
|
"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.31.1-desktop.1/buildx-v0.31.1-desktop.1.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.31.1-desktop.1/buildx-v0.31.1-desktop.1.darwin-amd64.sbom.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.31.1-desktop.1/buildx-v0.31.1-desktop.1.darwin-arm64",
|
||||||
"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.31.1-desktop.1/buildx-v0.31.1-desktop.1.darwin-arm64.sbom.json",
|
||||||
"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.31.1-desktop.1/buildx-v0.31.1-desktop.1.freebsd-amd64",
|
||||||
"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.31.1-desktop.1/buildx-v0.31.1-desktop.1.freebsd-amd64.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.31.1-desktop.1/buildx-v0.31.1-desktop.1.freebsd-arm64",
|
||||||
"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.31.1-desktop.1/buildx-v0.31.1-desktop.1.freebsd-arm64.sbom.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.31.1-desktop.1/buildx-v0.31.1-desktop.1.linux-amd64",
|
||||||
"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.31.1-desktop.1/buildx-v0.31.1-desktop.1.linux-amd64.sbom.json",
|
||||||
"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.31.1-desktop.1/buildx-v0.31.1-desktop.1.linux-arm-v6",
|
||||||
"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.31.1-desktop.1/buildx-v0.31.1-desktop.1.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-amd64",
|
"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.30.1-desktop.2/buildx-v0.30.1-desktop.2.linux-amd64.provenance.json",
|
"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.30.1-desktop.2/buildx-v0.30.1-desktop.2.linux-amd64.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.30.1-desktop.2/buildx-v0.30.1-desktop.2.linux-arm-v6",
|
"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.30.1-desktop.2/buildx-v0.30.1-desktop.2.linux-arm-v6.provenance.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.30.1-desktop.2/buildx-v0.30.1-desktop.2.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-ppc64le.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.31.1-desktop.1/buildx-v0.31.1-desktop.1.linux-riscv64",
|
||||||
"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.31.1-desktop.1/buildx-v0.31.1-desktop.1.linux-riscv64.sbom.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.31.1-desktop.1/buildx-v0.31.1-desktop.1.linux-s390x",
|
||||||
"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.31.1-desktop.1/buildx-v0.31.1-desktop.1.linux-s390x.sbom.json",
|
||||||
"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.31.1-desktop.1/buildx-v0.31.1-desktop.1.netbsd-amd64",
|
||||||
"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.31.1-desktop.1/buildx-v0.31.1-desktop.1.netbsd-amd64.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.31.1-desktop.1/buildx-v0.31.1-desktop.1.netbsd-arm64",
|
||||||
"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.31.1-desktop.1/buildx-v0.31.1-desktop.1.netbsd-arm64.sbom.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.31.1-desktop.1/buildx-v0.31.1-desktop.1.openbsd-amd64",
|
||||||
"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.31.1-desktop.1/buildx-v0.31.1-desktop.1.openbsd-amd64.sbom.json",
|
||||||
"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.31.1-desktop.1/buildx-v0.31.1-desktop.1.openbsd-arm64",
|
||||||
"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.31.1-desktop.1/buildx-v0.31.1-desktop.1.openbsd-arm64.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.31.1-desktop.1/buildx-v0.31.1-desktop.1.windows-amd64.exe",
|
||||||
"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.31.1-desktop.1/buildx-v0.31.1-desktop.1.windows-amd64.sbom.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.31.1-desktop.1/buildx-v0.31.1-desktop.1.windows-arm64.exe",
|
||||||
"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.31.1-desktop.1/buildx-v0.31.1-desktop.1.windows-arm64.sbom.json",
|
||||||
"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.31.1-desktop.1/checksums.txt"
|
||||||
"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",
|
"v0.31.1-desktop.1": {
|
||||||
"https://github.com/docker/buildx-desktop/releases/download/v0.30.1-desktop.2/buildx-v0.30.1-desktop.2.netbsd-arm64.sbom.json",
|
"id": 285373366,
|
||||||
"https://github.com/docker/buildx-desktop/releases/download/v0.30.1-desktop.2/buildx-v0.30.1-desktop.2.openbsd-amd64",
|
"tag_name": "v0.31.1-desktop.1",
|
||||||
"https://github.com/docker/buildx-desktop/releases/download/v0.30.1-desktop.2/buildx-v0.30.1-desktop.2.openbsd-amd64.provenance.json",
|
"html_url": "https://github.com/docker/buildx-desktop/releases/tag/v0.31.1-desktop.1",
|
||||||
"https://github.com/docker/buildx-desktop/releases/download/v0.30.1-desktop.2/buildx-v0.30.1-desktop.2.openbsd-amd64.sbom.json",
|
"assets": [
|
||||||
"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.31.1-desktop.1/buildx-v0.31.1-desktop.1.darwin-amd64",
|
||||||
"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.31.1-desktop.1/buildx-v0.31.1-desktop.1.darwin-amd64.sbom.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.31.1-desktop.1/buildx-v0.31.1-desktop.1.darwin-arm64",
|
||||||
"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.31.1-desktop.1/buildx-v0.31.1-desktop.1.darwin-arm64.sbom.json",
|
||||||
"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.31.1-desktop.1/buildx-v0.31.1-desktop.1.freebsd-amd64",
|
||||||
"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.31.1-desktop.1/buildx-v0.31.1-desktop.1.freebsd-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.31.1-desktop.1/buildx-v0.31.1-desktop.1.freebsd-arm64",
|
||||||
"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.31.1-desktop.1/buildx-v0.31.1-desktop.1.freebsd-arm64.sbom.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.31.1-desktop.1/buildx-v0.31.1-desktop.1.linux-amd64",
|
||||||
"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.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": {
|
"v0.30.1-desktop.2": {
|
||||||
@@ -177,62 +202,45 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"edge": {
|
"edge": {
|
||||||
"id": 269523829,
|
"id": 285373366,
|
||||||
"tag_name": "v0.30.1-desktop.2",
|
"tag_name": "v0.31.1-desktop.1",
|
||||||
"html_url": "https://github.com/docker/buildx-desktop/releases/tag/v0.30.1-desktop.2",
|
"html_url": "https://github.com/docker/buildx-desktop/releases/tag/v0.31.1-desktop.1",
|
||||||
"assets": [
|
"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.31.1-desktop.1/buildx-v0.31.1-desktop.1.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.31.1-desktop.1/buildx-v0.31.1-desktop.1.darwin-amd64.sbom.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.31.1-desktop.1/buildx-v0.31.1-desktop.1.darwin-arm64",
|
||||||
"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.31.1-desktop.1/buildx-v0.31.1-desktop.1.darwin-arm64.sbom.json",
|
||||||
"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.31.1-desktop.1/buildx-v0.31.1-desktop.1.freebsd-amd64",
|
||||||
"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.31.1-desktop.1/buildx-v0.31.1-desktop.1.freebsd-amd64.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.31.1-desktop.1/buildx-v0.31.1-desktop.1.freebsd-arm64",
|
||||||
"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.31.1-desktop.1/buildx-v0.31.1-desktop.1.freebsd-arm64.sbom.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.31.1-desktop.1/buildx-v0.31.1-desktop.1.linux-amd64",
|
||||||
"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.31.1-desktop.1/buildx-v0.31.1-desktop.1.linux-amd64.sbom.json",
|
||||||
"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.31.1-desktop.1/buildx-v0.31.1-desktop.1.linux-arm-v6",
|
||||||
"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.31.1-desktop.1/buildx-v0.31.1-desktop.1.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-amd64",
|
"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.30.1-desktop.2/buildx-v0.30.1-desktop.2.linux-amd64.provenance.json",
|
"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.30.1-desktop.2/buildx-v0.30.1-desktop.2.linux-amd64.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.30.1-desktop.2/buildx-v0.30.1-desktop.2.linux-arm-v6",
|
"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.30.1-desktop.2/buildx-v0.30.1-desktop.2.linux-arm-v6.provenance.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.30.1-desktop.2/buildx-v0.30.1-desktop.2.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-ppc64le.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.31.1-desktop.1/buildx-v0.31.1-desktop.1.linux-riscv64",
|
||||||
"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.31.1-desktop.1/buildx-v0.31.1-desktop.1.linux-riscv64.sbom.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.31.1-desktop.1/buildx-v0.31.1-desktop.1.linux-s390x",
|
||||||
"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.31.1-desktop.1/buildx-v0.31.1-desktop.1.linux-s390x.sbom.json",
|
||||||
"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.31.1-desktop.1/buildx-v0.31.1-desktop.1.netbsd-amd64",
|
||||||
"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.31.1-desktop.1/buildx-v0.31.1-desktop.1.netbsd-amd64.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.31.1-desktop.1/buildx-v0.31.1-desktop.1.netbsd-arm64",
|
||||||
"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.31.1-desktop.1/buildx-v0.31.1-desktop.1.netbsd-arm64.sbom.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.31.1-desktop.1/buildx-v0.31.1-desktop.1.openbsd-amd64",
|
||||||
"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.31.1-desktop.1/buildx-v0.31.1-desktop.1.openbsd-amd64.sbom.json",
|
||||||
"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.31.1-desktop.1/buildx-v0.31.1-desktop.1.openbsd-arm64",
|
||||||
"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.31.1-desktop.1/buildx-v0.31.1-desktop.1.openbsd-arm64.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.31.1-desktop.1/buildx-v0.31.1-desktop.1.windows-amd64.exe",
|
||||||
"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.31.1-desktop.1/buildx-v0.31.1-desktop.1.windows-amd64.sbom.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.31.1-desktop.1/buildx-v0.31.1-desktop.1.windows-arm64.exe",
|
||||||
"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.31.1-desktop.1/buildx-v0.31.1-desktop.1.windows-arm64.sbom.json",
|
||||||
"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.31.1-desktop.1/checksums.txt"
|
||||||
"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"
|
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"v0.28.0-desktop.1": {
|
"v0.28.0-desktop.1": {
|
||||||
|
|||||||
578
.github/buildx-releases.json
vendored
578
.github/buildx-releases.json
vendored
@@ -1,153 +1,449 @@
|
|||||||
{
|
{
|
||||||
"latest": {
|
"latest": {
|
||||||
"id": 278817585,
|
"id": 292739715,
|
||||||
"tag_name": "v0.31.0",
|
"tag_name": "v0.32.0",
|
||||||
"html_url": "https://github.com/docker/buildx/releases/tag/v0.31.0",
|
"html_url": "https://github.com/docker/buildx/releases/tag/v0.32.0",
|
||||||
"assets": [
|
"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.32.0/buildx-v0.32.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.32.0/buildx-v0.32.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.32.0/buildx-v0.32.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.32.0/buildx-v0.32.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.32.0/buildx-v0.32.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.32.0/buildx-v0.32.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.32.0/buildx-v0.32.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.32.0/buildx-v0.32.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.32.0/buildx-v0.32.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.32.0/buildx-v0.32.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.32.0/buildx-v0.32.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.32.0/buildx-v0.32.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.32.0/buildx-v0.32.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.32.0/buildx-v0.32.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.32.0/buildx-v0.32.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.32.0/buildx-v0.32.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.32.0/buildx-v0.32.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.32.0/buildx-v0.32.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.32.0/buildx-v0.32.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.32.0/buildx-v0.32.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.32.0/buildx-v0.32.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.32.0/buildx-v0.32.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.32.0/buildx-v0.32.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.32.0/buildx-v0.32.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.32.0/buildx-v0.32.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.32.0/buildx-v0.32.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.32.0/buildx-v0.32.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.32.0/buildx-v0.32.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.32.0/buildx-v0.32.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.32.0/buildx-v0.32.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.32.0/buildx-v0.32.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.32.0/buildx-v0.32.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.32.0/buildx-v0.32.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.32.0/buildx-v0.32.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.32.0/buildx-v0.32.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.32.0/buildx-v0.32.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.32.0/buildx-v0.32.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.32.0/buildx-v0.32.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.32.0/buildx-v0.32.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.32.0/buildx-v0.32.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.32.0/buildx-v0.32.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.32.0/buildx-v0.32.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.32.0/buildx-v0.32.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.32.0/buildx-v0.32.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.32.0/buildx-v0.32.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.32.0/buildx-v0.32.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.32.0/buildx-v0.32.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.32.0/buildx-v0.32.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.32.0/buildx-v0.32.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.32.0/buildx-v0.32.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.32.0/buildx-v0.32.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.32.0/buildx-v0.32.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.32.0/buildx-v0.32.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.32.0/buildx-v0.32.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.32.0/buildx-v0.32.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.32.0/buildx-v0.32.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.32.0/buildx-v0.32.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.32.0/buildx-v0.32.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.32.0/buildx-v0.32.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.32.0/buildx-v0.32.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.32.0/buildx-v0.32.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.32.0/buildx-v0.32.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.32.0/buildx-v0.32.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.32.0/buildx-v0.32.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.32.0/buildx-v0.32.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.32.0/buildx-v0.32.0.windows-arm64.sigstore.json",
|
||||||
"https://github.com/docker/buildx/releases/download/v0.31.0/checksums.txt"
|
"https://github.com/docker/buildx/releases/download/v0.32.0/checksums.txt"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"v0.31.0": {
|
"v0.32.0": {
|
||||||
"id": 278817585,
|
"id": 292739715,
|
||||||
"tag_name": "v0.31.0",
|
"tag_name": "v0.32.0",
|
||||||
"html_url": "https://github.com/docker/buildx/releases/tag/v0.31.0",
|
"html_url": "https://github.com/docker/buildx/releases/tag/v0.32.0",
|
||||||
"assets": [
|
"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.32.0/buildx-v0.32.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.32.0/buildx-v0.32.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.32.0/buildx-v0.32.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.32.0/buildx-v0.32.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.32.0/buildx-v0.32.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.32.0/buildx-v0.32.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.32.0/buildx-v0.32.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.32.0/buildx-v0.32.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.32.0/buildx-v0.32.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.32.0/buildx-v0.32.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.32.0/buildx-v0.32.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.32.0/buildx-v0.32.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.32.0/buildx-v0.32.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.32.0/buildx-v0.32.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.32.0/buildx-v0.32.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.32.0/buildx-v0.32.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.32.0/buildx-v0.32.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.32.0/buildx-v0.32.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.32.0/buildx-v0.32.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.32.0/buildx-v0.32.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.32.0/buildx-v0.32.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.32.0/buildx-v0.32.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.32.0/buildx-v0.32.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.32.0/buildx-v0.32.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.32.0/buildx-v0.32.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.32.0/buildx-v0.32.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.32.0/buildx-v0.32.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.32.0/buildx-v0.32.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.32.0/buildx-v0.32.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.32.0/buildx-v0.32.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.32.0/buildx-v0.32.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.32.0/buildx-v0.32.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.32.0/buildx-v0.32.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.32.0/buildx-v0.32.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.32.0/buildx-v0.32.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.32.0/buildx-v0.32.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.32.0/buildx-v0.32.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.32.0/buildx-v0.32.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.32.0/buildx-v0.32.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.32.0/buildx-v0.32.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.32.0/buildx-v0.32.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.32.0/buildx-v0.32.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.32.0/buildx-v0.32.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.32.0/buildx-v0.32.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.32.0/buildx-v0.32.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.32.0/buildx-v0.32.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.32.0/buildx-v0.32.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.32.0/buildx-v0.32.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.32.0/buildx-v0.32.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.32.0/buildx-v0.32.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.32.0/buildx-v0.32.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.32.0/buildx-v0.32.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.32.0/buildx-v0.32.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.32.0/buildx-v0.32.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.32.0/buildx-v0.32.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.32.0/buildx-v0.32.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.32.0/buildx-v0.32.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.32.0/buildx-v0.32.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.32.0/buildx-v0.32.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.32.0/buildx-v0.32.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.32.0/buildx-v0.32.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.32.0/buildx-v0.32.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.32.0/buildx-v0.32.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.32.0/buildx-v0.32.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.32.0/buildx-v0.32.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.32.0/buildx-v0.32.0.windows-arm64.sigstore.json",
|
||||||
"https://github.com/docker/buildx/releases/download/v0.31.0/checksums.txt"
|
"https://github.com/docker/buildx/releases/download/v0.32.0/checksums.txt"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"edge": {
|
"edge": {
|
||||||
|
"id": 292739715,
|
||||||
|
"tag_name": "v0.32.0",
|
||||||
|
"html_url": "https://github.com/docker/buildx/releases/tag/v0.32.0",
|
||||||
|
"assets": [
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.32.0/buildx-v0.32.0.darwin-amd64",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.32.0/buildx-v0.32.0.darwin-amd64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.32.0/buildx-v0.32.0.darwin-amd64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.32.0/buildx-v0.32.0.darwin-arm64",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.32.0/buildx-v0.32.0.darwin-arm64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.32.0/buildx-v0.32.0.darwin-arm64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.32.0/buildx-v0.32.0.freebsd-amd64",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.32.0/buildx-v0.32.0.freebsd-amd64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.32.0/buildx-v0.32.0.freebsd-amd64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.32.0/buildx-v0.32.0.freebsd-amd64.sigstore.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.32.0/buildx-v0.32.0.freebsd-arm64",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.32.0/buildx-v0.32.0.freebsd-arm64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.32.0/buildx-v0.32.0.freebsd-arm64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.32.0/buildx-v0.32.0.freebsd-arm64.sigstore.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.32.0/buildx-v0.32.0.linux-amd64",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.32.0/buildx-v0.32.0.linux-amd64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.32.0/buildx-v0.32.0.linux-amd64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.32.0/buildx-v0.32.0.linux-amd64.sigstore.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.32.0/buildx-v0.32.0.linux-arm-v6",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.32.0/buildx-v0.32.0.linux-arm-v6.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.32.0/buildx-v0.32.0.linux-arm-v6.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.32.0/buildx-v0.32.0.linux-arm-v6.sigstore.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.32.0/buildx-v0.32.0.linux-arm-v7",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.32.0/buildx-v0.32.0.linux-arm-v7.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.32.0/buildx-v0.32.0.linux-arm-v7.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.32.0/buildx-v0.32.0.linux-arm-v7.sigstore.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.32.0/buildx-v0.32.0.linux-arm64",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.32.0/buildx-v0.32.0.linux-arm64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.32.0/buildx-v0.32.0.linux-arm64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.32.0/buildx-v0.32.0.linux-arm64.sigstore.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.32.0/buildx-v0.32.0.linux-ppc64le",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.32.0/buildx-v0.32.0.linux-ppc64le.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.32.0/buildx-v0.32.0.linux-ppc64le.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.32.0/buildx-v0.32.0.linux-ppc64le.sigstore.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.32.0/buildx-v0.32.0.linux-riscv64",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.32.0/buildx-v0.32.0.linux-riscv64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.32.0/buildx-v0.32.0.linux-riscv64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.32.0/buildx-v0.32.0.linux-riscv64.sigstore.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.32.0/buildx-v0.32.0.linux-s390x",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.32.0/buildx-v0.32.0.linux-s390x.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.32.0/buildx-v0.32.0.linux-s390x.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.32.0/buildx-v0.32.0.linux-s390x.sigstore.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.32.0/buildx-v0.32.0.netbsd-amd64",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.32.0/buildx-v0.32.0.netbsd-amd64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.32.0/buildx-v0.32.0.netbsd-amd64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.32.0/buildx-v0.32.0.netbsd-amd64.sigstore.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.32.0/buildx-v0.32.0.netbsd-arm64",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.32.0/buildx-v0.32.0.netbsd-arm64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.32.0/buildx-v0.32.0.netbsd-arm64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.32.0/buildx-v0.32.0.netbsd-arm64.sigstore.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.32.0/buildx-v0.32.0.openbsd-amd64",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.32.0/buildx-v0.32.0.openbsd-amd64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.32.0/buildx-v0.32.0.openbsd-amd64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.32.0/buildx-v0.32.0.openbsd-amd64.sigstore.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.32.0/buildx-v0.32.0.openbsd-arm64",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.32.0/buildx-v0.32.0.openbsd-arm64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.32.0/buildx-v0.32.0.openbsd-arm64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.32.0/buildx-v0.32.0.openbsd-arm64.sigstore.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.32.0/buildx-v0.32.0.windows-amd64.exe",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.32.0/buildx-v0.32.0.windows-amd64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.32.0/buildx-v0.32.0.windows-amd64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.32.0/buildx-v0.32.0.windows-amd64.sigstore.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.32.0/buildx-v0.32.0.windows-arm64.exe",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.32.0/buildx-v0.32.0.windows-arm64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.32.0/buildx-v0.32.0.windows-arm64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.32.0/buildx-v0.32.0.windows-arm64.sigstore.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.32.0/checksums.txt"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"v0.32.0-rc2": {
|
||||||
|
"id": 291436359,
|
||||||
|
"tag_name": "v0.32.0-rc2",
|
||||||
|
"html_url": "https://github.com/docker/buildx/releases/tag/v0.32.0-rc2",
|
||||||
|
"assets": [
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.32.0-rc2/buildx-v0.32.0-rc2.darwin-amd64",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.32.0-rc2/buildx-v0.32.0-rc2.darwin-amd64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.32.0-rc2/buildx-v0.32.0-rc2.darwin-amd64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.32.0-rc2/buildx-v0.32.0-rc2.darwin-arm64",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.32.0-rc2/buildx-v0.32.0-rc2.darwin-arm64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.32.0-rc2/buildx-v0.32.0-rc2.darwin-arm64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.32.0-rc2/buildx-v0.32.0-rc2.freebsd-amd64",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.32.0-rc2/buildx-v0.32.0-rc2.freebsd-amd64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.32.0-rc2/buildx-v0.32.0-rc2.freebsd-amd64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.32.0-rc2/buildx-v0.32.0-rc2.freebsd-amd64.sigstore.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.32.0-rc2/buildx-v0.32.0-rc2.freebsd-arm64",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.32.0-rc2/buildx-v0.32.0-rc2.freebsd-arm64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.32.0-rc2/buildx-v0.32.0-rc2.freebsd-arm64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.32.0-rc2/buildx-v0.32.0-rc2.freebsd-arm64.sigstore.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.32.0-rc2/buildx-v0.32.0-rc2.linux-amd64",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.32.0-rc2/buildx-v0.32.0-rc2.linux-amd64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.32.0-rc2/buildx-v0.32.0-rc2.linux-amd64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.32.0-rc2/buildx-v0.32.0-rc2.linux-amd64.sigstore.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.32.0-rc2/buildx-v0.32.0-rc2.linux-arm-v6",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.32.0-rc2/buildx-v0.32.0-rc2.linux-arm-v6.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.32.0-rc2/buildx-v0.32.0-rc2.linux-arm-v6.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.32.0-rc2/buildx-v0.32.0-rc2.linux-arm-v6.sigstore.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.32.0-rc2/buildx-v0.32.0-rc2.linux-arm-v7",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.32.0-rc2/buildx-v0.32.0-rc2.linux-arm-v7.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.32.0-rc2/buildx-v0.32.0-rc2.linux-arm-v7.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.32.0-rc2/buildx-v0.32.0-rc2.linux-arm-v7.sigstore.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.32.0-rc2/buildx-v0.32.0-rc2.linux-arm64",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.32.0-rc2/buildx-v0.32.0-rc2.linux-arm64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.32.0-rc2/buildx-v0.32.0-rc2.linux-arm64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.32.0-rc2/buildx-v0.32.0-rc2.linux-arm64.sigstore.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.32.0-rc2/buildx-v0.32.0-rc2.linux-ppc64le",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.32.0-rc2/buildx-v0.32.0-rc2.linux-ppc64le.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.32.0-rc2/buildx-v0.32.0-rc2.linux-ppc64le.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.32.0-rc2/buildx-v0.32.0-rc2.linux-ppc64le.sigstore.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.32.0-rc2/buildx-v0.32.0-rc2.linux-riscv64",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.32.0-rc2/buildx-v0.32.0-rc2.linux-riscv64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.32.0-rc2/buildx-v0.32.0-rc2.linux-riscv64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.32.0-rc2/buildx-v0.32.0-rc2.linux-riscv64.sigstore.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.32.0-rc2/buildx-v0.32.0-rc2.linux-s390x",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.32.0-rc2/buildx-v0.32.0-rc2.linux-s390x.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.32.0-rc2/buildx-v0.32.0-rc2.linux-s390x.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.32.0-rc2/buildx-v0.32.0-rc2.linux-s390x.sigstore.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.32.0-rc2/buildx-v0.32.0-rc2.netbsd-amd64",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.32.0-rc2/buildx-v0.32.0-rc2.netbsd-amd64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.32.0-rc2/buildx-v0.32.0-rc2.netbsd-amd64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.32.0-rc2/buildx-v0.32.0-rc2.netbsd-amd64.sigstore.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.32.0-rc2/buildx-v0.32.0-rc2.netbsd-arm64",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.32.0-rc2/buildx-v0.32.0-rc2.netbsd-arm64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.32.0-rc2/buildx-v0.32.0-rc2.netbsd-arm64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.32.0-rc2/buildx-v0.32.0-rc2.netbsd-arm64.sigstore.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.32.0-rc2/buildx-v0.32.0-rc2.openbsd-amd64",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.32.0-rc2/buildx-v0.32.0-rc2.openbsd-amd64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.32.0-rc2/buildx-v0.32.0-rc2.openbsd-amd64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.32.0-rc2/buildx-v0.32.0-rc2.openbsd-amd64.sigstore.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.32.0-rc2/buildx-v0.32.0-rc2.openbsd-arm64",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.32.0-rc2/buildx-v0.32.0-rc2.openbsd-arm64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.32.0-rc2/buildx-v0.32.0-rc2.openbsd-arm64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.32.0-rc2/buildx-v0.32.0-rc2.openbsd-arm64.sigstore.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.32.0-rc2/buildx-v0.32.0-rc2.windows-amd64.exe",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.32.0-rc2/buildx-v0.32.0-rc2.windows-amd64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.32.0-rc2/buildx-v0.32.0-rc2.windows-amd64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.32.0-rc2/buildx-v0.32.0-rc2.windows-amd64.sigstore.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.32.0-rc2/buildx-v0.32.0-rc2.windows-arm64.exe",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.32.0-rc2/buildx-v0.32.0-rc2.windows-arm64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.32.0-rc2/buildx-v0.32.0-rc2.windows-arm64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.32.0-rc2/buildx-v0.32.0-rc2.windows-arm64.sigstore.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.32.0-rc2/checksums.txt"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"v0.32.0-rc1": {
|
||||||
|
"id": 290111799,
|
||||||
|
"tag_name": "v0.32.0-rc1",
|
||||||
|
"html_url": "https://github.com/docker/buildx/releases/tag/v0.32.0-rc1",
|
||||||
|
"assets": [
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.32.0-rc1/buildx-v0.32.0-rc1.darwin-amd64",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.32.0-rc1/buildx-v0.32.0-rc1.darwin-amd64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.32.0-rc1/buildx-v0.32.0-rc1.darwin-amd64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.32.0-rc1/buildx-v0.32.0-rc1.darwin-arm64",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.32.0-rc1/buildx-v0.32.0-rc1.darwin-arm64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.32.0-rc1/buildx-v0.32.0-rc1.darwin-arm64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.32.0-rc1/buildx-v0.32.0-rc1.freebsd-amd64",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.32.0-rc1/buildx-v0.32.0-rc1.freebsd-amd64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.32.0-rc1/buildx-v0.32.0-rc1.freebsd-amd64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.32.0-rc1/buildx-v0.32.0-rc1.freebsd-amd64.sigstore.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.32.0-rc1/buildx-v0.32.0-rc1.freebsd-arm64",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.32.0-rc1/buildx-v0.32.0-rc1.freebsd-arm64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.32.0-rc1/buildx-v0.32.0-rc1.freebsd-arm64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.32.0-rc1/buildx-v0.32.0-rc1.freebsd-arm64.sigstore.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.32.0-rc1/buildx-v0.32.0-rc1.linux-amd64",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.32.0-rc1/buildx-v0.32.0-rc1.linux-amd64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.32.0-rc1/buildx-v0.32.0-rc1.linux-amd64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.32.0-rc1/buildx-v0.32.0-rc1.linux-amd64.sigstore.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.32.0-rc1/buildx-v0.32.0-rc1.linux-arm-v6",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.32.0-rc1/buildx-v0.32.0-rc1.linux-arm-v6.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.32.0-rc1/buildx-v0.32.0-rc1.linux-arm-v6.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.32.0-rc1/buildx-v0.32.0-rc1.linux-arm-v6.sigstore.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.32.0-rc1/buildx-v0.32.0-rc1.linux-arm-v7",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.32.0-rc1/buildx-v0.32.0-rc1.linux-arm-v7.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.32.0-rc1/buildx-v0.32.0-rc1.linux-arm-v7.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.32.0-rc1/buildx-v0.32.0-rc1.linux-arm-v7.sigstore.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.32.0-rc1/buildx-v0.32.0-rc1.linux-arm64",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.32.0-rc1/buildx-v0.32.0-rc1.linux-arm64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.32.0-rc1/buildx-v0.32.0-rc1.linux-arm64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.32.0-rc1/buildx-v0.32.0-rc1.linux-arm64.sigstore.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.32.0-rc1/buildx-v0.32.0-rc1.linux-ppc64le",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.32.0-rc1/buildx-v0.32.0-rc1.linux-ppc64le.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.32.0-rc1/buildx-v0.32.0-rc1.linux-ppc64le.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.32.0-rc1/buildx-v0.32.0-rc1.linux-ppc64le.sigstore.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.32.0-rc1/buildx-v0.32.0-rc1.linux-riscv64",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.32.0-rc1/buildx-v0.32.0-rc1.linux-riscv64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.32.0-rc1/buildx-v0.32.0-rc1.linux-riscv64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.32.0-rc1/buildx-v0.32.0-rc1.linux-riscv64.sigstore.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.32.0-rc1/buildx-v0.32.0-rc1.linux-s390x",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.32.0-rc1/buildx-v0.32.0-rc1.linux-s390x.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.32.0-rc1/buildx-v0.32.0-rc1.linux-s390x.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.32.0-rc1/buildx-v0.32.0-rc1.linux-s390x.sigstore.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.32.0-rc1/buildx-v0.32.0-rc1.netbsd-amd64",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.32.0-rc1/buildx-v0.32.0-rc1.netbsd-amd64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.32.0-rc1/buildx-v0.32.0-rc1.netbsd-amd64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.32.0-rc1/buildx-v0.32.0-rc1.netbsd-amd64.sigstore.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.32.0-rc1/buildx-v0.32.0-rc1.netbsd-arm64",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.32.0-rc1/buildx-v0.32.0-rc1.netbsd-arm64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.32.0-rc1/buildx-v0.32.0-rc1.netbsd-arm64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.32.0-rc1/buildx-v0.32.0-rc1.netbsd-arm64.sigstore.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.32.0-rc1/buildx-v0.32.0-rc1.openbsd-amd64",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.32.0-rc1/buildx-v0.32.0-rc1.openbsd-amd64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.32.0-rc1/buildx-v0.32.0-rc1.openbsd-amd64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.32.0-rc1/buildx-v0.32.0-rc1.openbsd-amd64.sigstore.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.32.0-rc1/buildx-v0.32.0-rc1.openbsd-arm64",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.32.0-rc1/buildx-v0.32.0-rc1.openbsd-arm64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.32.0-rc1/buildx-v0.32.0-rc1.openbsd-arm64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.32.0-rc1/buildx-v0.32.0-rc1.openbsd-arm64.sigstore.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.32.0-rc1/buildx-v0.32.0-rc1.windows-amd64.exe",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.32.0-rc1/buildx-v0.32.0-rc1.windows-amd64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.32.0-rc1/buildx-v0.32.0-rc1.windows-amd64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.32.0-rc1/buildx-v0.32.0-rc1.windows-amd64.sigstore.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.32.0-rc1/buildx-v0.32.0-rc1.windows-arm64.exe",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.32.0-rc1/buildx-v0.32.0-rc1.windows-arm64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.32.0-rc1/buildx-v0.32.0-rc1.windows-arm64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.32.0-rc1/buildx-v0.32.0-rc1.windows-arm64.sigstore.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.32.0-rc1/checksums.txt"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"v0.31.1": {
|
||||||
|
"id": 280887108,
|
||||||
|
"tag_name": "v0.31.1",
|
||||||
|
"html_url": "https://github.com/docker/buildx/releases/tag/v0.31.1",
|
||||||
|
"assets": [
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.31.1/buildx-v0.31.1.darwin-amd64",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.31.1/buildx-v0.31.1.darwin-amd64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.31.1/buildx-v0.31.1.darwin-amd64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.31.1/buildx-v0.31.1.darwin-arm64",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.31.1/buildx-v0.31.1.darwin-arm64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.31.1/buildx-v0.31.1.darwin-arm64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.31.1/buildx-v0.31.1.freebsd-amd64",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.31.1/buildx-v0.31.1.freebsd-amd64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.31.1/buildx-v0.31.1.freebsd-amd64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.31.1/buildx-v0.31.1.freebsd-amd64.sigstore.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.31.1/buildx-v0.31.1.freebsd-arm64",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.31.1/buildx-v0.31.1.freebsd-arm64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.31.1/buildx-v0.31.1.freebsd-arm64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.31.1/buildx-v0.31.1.freebsd-arm64.sigstore.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.31.1/buildx-v0.31.1.linux-amd64",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.31.1/buildx-v0.31.1.linux-amd64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.31.1/buildx-v0.31.1.linux-amd64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.31.1/buildx-v0.31.1.linux-amd64.sigstore.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.31.1/buildx-v0.31.1.linux-arm-v6",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.31.1/buildx-v0.31.1.linux-arm-v6.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.31.1/buildx-v0.31.1.linux-arm-v6.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.31.1/buildx-v0.31.1.linux-arm-v6.sigstore.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.31.1/buildx-v0.31.1.linux-arm-v7",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.31.1/buildx-v0.31.1.linux-arm-v7.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.31.1/buildx-v0.31.1.linux-arm-v7.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.31.1/buildx-v0.31.1.linux-arm-v7.sigstore.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.31.1/buildx-v0.31.1.linux-arm64",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.31.1/buildx-v0.31.1.linux-arm64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.31.1/buildx-v0.31.1.linux-arm64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.31.1/buildx-v0.31.1.linux-arm64.sigstore.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.31.1/buildx-v0.31.1.linux-ppc64le",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.31.1/buildx-v0.31.1.linux-ppc64le.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.31.1/buildx-v0.31.1.linux-ppc64le.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.31.1/buildx-v0.31.1.linux-ppc64le.sigstore.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.31.1/buildx-v0.31.1.linux-riscv64",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.31.1/buildx-v0.31.1.linux-riscv64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.31.1/buildx-v0.31.1.linux-riscv64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.31.1/buildx-v0.31.1.linux-riscv64.sigstore.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.31.1/buildx-v0.31.1.linux-s390x",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.31.1/buildx-v0.31.1.linux-s390x.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.31.1/buildx-v0.31.1.linux-s390x.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.31.1/buildx-v0.31.1.linux-s390x.sigstore.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.31.1/buildx-v0.31.1.netbsd-amd64",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.31.1/buildx-v0.31.1.netbsd-amd64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.31.1/buildx-v0.31.1.netbsd-amd64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.31.1/buildx-v0.31.1.netbsd-amd64.sigstore.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.31.1/buildx-v0.31.1.netbsd-arm64",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.31.1/buildx-v0.31.1.netbsd-arm64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.31.1/buildx-v0.31.1.netbsd-arm64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.31.1/buildx-v0.31.1.netbsd-arm64.sigstore.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.31.1/buildx-v0.31.1.openbsd-amd64",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.31.1/buildx-v0.31.1.openbsd-amd64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.31.1/buildx-v0.31.1.openbsd-amd64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.31.1/buildx-v0.31.1.openbsd-amd64.sigstore.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.31.1/buildx-v0.31.1.openbsd-arm64",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.31.1/buildx-v0.31.1.openbsd-arm64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.31.1/buildx-v0.31.1.openbsd-arm64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.31.1/buildx-v0.31.1.openbsd-arm64.sigstore.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.31.1/buildx-v0.31.1.windows-amd64.exe",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.31.1/buildx-v0.31.1.windows-amd64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.31.1/buildx-v0.31.1.windows-amd64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.31.1/buildx-v0.31.1.windows-amd64.sigstore.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.31.1/buildx-v0.31.1.windows-arm64.exe",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.31.1/buildx-v0.31.1.windows-arm64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.31.1/buildx-v0.31.1.windows-arm64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.31.1/buildx-v0.31.1.windows-arm64.sigstore.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.31.1/checksums.txt"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"v0.31.0": {
|
||||||
"id": 278817585,
|
"id": 278817585,
|
||||||
"tag_name": "v0.31.0",
|
"tag_name": "v0.31.0",
|
||||||
"html_url": "https://github.com/docker/buildx/releases/tag/v0.31.0",
|
"html_url": "https://github.com/docker/buildx/releases/tag/v0.31.0",
|
||||||
|
|||||||
277
.github/compose-releases.json
vendored
277
.github/compose-releases.json
vendored
@@ -1,54 +1,128 @@
|
|||||||
{
|
{
|
||||||
"latest": {
|
"latest": {
|
||||||
"id": 278255932,
|
"id": 289948555,
|
||||||
"tag_name": "v5.0.2",
|
"tag_name": "v5.1.0",
|
||||||
"html_url": "https://github.com/docker/compose/releases/tag/v5.0.2",
|
"html_url": "https://github.com/docker/compose/releases/tag/v5.1.0",
|
||||||
"assets": [
|
"assets": [
|
||||||
"https://github.com/docker/compose/releases/download/v5.0.2/checksums.txt",
|
"https://github.com/docker/compose/releases/download/v5.1.0/checksums.txt",
|
||||||
"https://github.com/docker/compose/releases/download/v5.0.2/docker-compose-darwin-aarch64",
|
"https://github.com/docker/compose/releases/download/v5.1.0/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.1.0/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.1.0/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.1.0/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.1.0/docker-compose-darwin-aarch64.sigstore.json",
|
||||||
"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.1.0/docker-compose-darwin-x86_64",
|
||||||
"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.1.0/docker-compose-darwin-x86_64.provenance.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.1.0/docker-compose-darwin-x86_64.sbom.json",
|
||||||
"https://github.com/docker/compose/releases/download/v5.0.2/docker-compose-linux-aarch64",
|
"https://github.com/docker/compose/releases/download/v5.1.0/docker-compose-darwin-x86_64.sha256",
|
||||||
"https://github.com/docker/compose/releases/download/v5.0.2/docker-compose-linux-aarch64.provenance.json",
|
"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.0.2/docker-compose-linux-aarch64.sbom.json",
|
"https://github.com/docker/compose/releases/download/v5.1.0/docker-compose-linux-aarch64",
|
||||||
"https://github.com/docker/compose/releases/download/v5.0.2/docker-compose-linux-aarch64.sha256",
|
"https://github.com/docker/compose/releases/download/v5.1.0/docker-compose-linux-aarch64.provenance.json",
|
||||||
"https://github.com/docker/compose/releases/download/v5.0.2/docker-compose-linux-armv6",
|
"https://github.com/docker/compose/releases/download/v5.1.0/docker-compose-linux-aarch64.sbom.json",
|
||||||
"https://github.com/docker/compose/releases/download/v5.0.2/docker-compose-linux-armv6.provenance.json",
|
"https://github.com/docker/compose/releases/download/v5.1.0/docker-compose-linux-aarch64.sha256",
|
||||||
"https://github.com/docker/compose/releases/download/v5.0.2/docker-compose-linux-armv6.sbom.json",
|
"https://github.com/docker/compose/releases/download/v5.1.0/docker-compose-linux-aarch64.sigstore.json",
|
||||||
"https://github.com/docker/compose/releases/download/v5.0.2/docker-compose-linux-armv6.sha256",
|
"https://github.com/docker/compose/releases/download/v5.1.0/docker-compose-linux-armv6",
|
||||||
"https://github.com/docker/compose/releases/download/v5.0.2/docker-compose-linux-armv7",
|
"https://github.com/docker/compose/releases/download/v5.1.0/docker-compose-linux-armv6.provenance.json",
|
||||||
"https://github.com/docker/compose/releases/download/v5.0.2/docker-compose-linux-armv7.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.0.2/docker-compose-linux-armv7.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.0.2/docker-compose-linux-armv7.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.0.2/docker-compose-linux-ppc64le",
|
"https://github.com/docker/compose/releases/download/v5.1.0/docker-compose-linux-armv7",
|
||||||
"https://github.com/docker/compose/releases/download/v5.0.2/docker-compose-linux-ppc64le.provenance.json",
|
"https://github.com/docker/compose/releases/download/v5.1.0/docker-compose-linux-armv7.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.1.0/docker-compose-linux-armv7.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.1.0/docker-compose-linux-armv7.sha256",
|
||||||
"https://github.com/docker/compose/releases/download/v5.0.2/docker-compose-linux-riscv64",
|
"https://github.com/docker/compose/releases/download/v5.1.0/docker-compose-linux-armv7.sigstore.json",
|
||||||
"https://github.com/docker/compose/releases/download/v5.0.2/docker-compose-linux-riscv64.provenance.json",
|
"https://github.com/docker/compose/releases/download/v5.1.0/docker-compose-linux-ppc64le",
|
||||||
"https://github.com/docker/compose/releases/download/v5.0.2/docker-compose-linux-riscv64.sbom.json",
|
"https://github.com/docker/compose/releases/download/v5.1.0/docker-compose-linux-ppc64le.provenance.json",
|
||||||
"https://github.com/docker/compose/releases/download/v5.0.2/docker-compose-linux-riscv64.sha256",
|
"https://github.com/docker/compose/releases/download/v5.1.0/docker-compose-linux-ppc64le.sbom.json",
|
||||||
"https://github.com/docker/compose/releases/download/v5.0.2/docker-compose-linux-s390x",
|
"https://github.com/docker/compose/releases/download/v5.1.0/docker-compose-linux-ppc64le.sha256",
|
||||||
"https://github.com/docker/compose/releases/download/v5.0.2/docker-compose-linux-s390x.provenance.json",
|
"https://github.com/docker/compose/releases/download/v5.1.0/docker-compose-linux-ppc64le.sigstore.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.1.0/docker-compose-linux-riscv64",
|
||||||
"https://github.com/docker/compose/releases/download/v5.0.2/docker-compose-linux-s390x.sha256",
|
"https://github.com/docker/compose/releases/download/v5.1.0/docker-compose-linux-riscv64.provenance.json",
|
||||||
"https://github.com/docker/compose/releases/download/v5.0.2/docker-compose-linux-x86_64",
|
"https://github.com/docker/compose/releases/download/v5.1.0/docker-compose-linux-riscv64.sbom.json",
|
||||||
"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.1.0/docker-compose-linux-riscv64.sha256",
|
||||||
"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.1.0/docker-compose-linux-riscv64.sigstore.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.1.0/docker-compose-linux-s390x",
|
||||||
"https://github.com/docker/compose/releases/download/v5.0.2/docker-compose-windows-aarch64.exe",
|
"https://github.com/docker/compose/releases/download/v5.1.0/docker-compose-linux-s390x.provenance.json",
|
||||||
"https://github.com/docker/compose/releases/download/v5.0.2/docker-compose-windows-aarch64.exe.sha256",
|
"https://github.com/docker/compose/releases/download/v5.1.0/docker-compose-linux-s390x.sbom.json",
|
||||||
"https://github.com/docker/compose/releases/download/v5.0.2/docker-compose-windows-aarch64.provenance.json",
|
"https://github.com/docker/compose/releases/download/v5.1.0/docker-compose-linux-s390x.sha256",
|
||||||
"https://github.com/docker/compose/releases/download/v5.0.2/docker-compose-windows-aarch64.sbom.json",
|
"https://github.com/docker/compose/releases/download/v5.1.0/docker-compose-linux-s390x.sigstore.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.1.0/docker-compose-linux-x86_64",
|
||||||
"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.1.0/docker-compose-linux-x86_64.provenance.json",
|
||||||
"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.1.0/docker-compose-linux-x86_64.sbom.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/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": {
|
"v5.0.2": {
|
||||||
@@ -208,55 +282,66 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"edge": {
|
"edge": {
|
||||||
"id": 278255932,
|
"id": 289948555,
|
||||||
"tag_name": "v5.0.2",
|
"tag_name": "v5.1.0",
|
||||||
"html_url": "https://github.com/docker/compose/releases/tag/v5.0.2",
|
"html_url": "https://github.com/docker/compose/releases/tag/v5.1.0",
|
||||||
"assets": [
|
"assets": [
|
||||||
"https://github.com/docker/compose/releases/download/v5.0.2/checksums.txt",
|
"https://github.com/docker/compose/releases/download/v5.1.0/checksums.txt",
|
||||||
"https://github.com/docker/compose/releases/download/v5.0.2/docker-compose-darwin-aarch64",
|
"https://github.com/docker/compose/releases/download/v5.1.0/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.1.0/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.1.0/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.1.0/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.1.0/docker-compose-darwin-aarch64.sigstore.json",
|
||||||
"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.1.0/docker-compose-darwin-x86_64",
|
||||||
"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.1.0/docker-compose-darwin-x86_64.provenance.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.1.0/docker-compose-darwin-x86_64.sbom.json",
|
||||||
"https://github.com/docker/compose/releases/download/v5.0.2/docker-compose-linux-aarch64",
|
"https://github.com/docker/compose/releases/download/v5.1.0/docker-compose-darwin-x86_64.sha256",
|
||||||
"https://github.com/docker/compose/releases/download/v5.0.2/docker-compose-linux-aarch64.provenance.json",
|
"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.0.2/docker-compose-linux-aarch64.sbom.json",
|
"https://github.com/docker/compose/releases/download/v5.1.0/docker-compose-linux-aarch64",
|
||||||
"https://github.com/docker/compose/releases/download/v5.0.2/docker-compose-linux-aarch64.sha256",
|
"https://github.com/docker/compose/releases/download/v5.1.0/docker-compose-linux-aarch64.provenance.json",
|
||||||
"https://github.com/docker/compose/releases/download/v5.0.2/docker-compose-linux-armv6",
|
"https://github.com/docker/compose/releases/download/v5.1.0/docker-compose-linux-aarch64.sbom.json",
|
||||||
"https://github.com/docker/compose/releases/download/v5.0.2/docker-compose-linux-armv6.provenance.json",
|
"https://github.com/docker/compose/releases/download/v5.1.0/docker-compose-linux-aarch64.sha256",
|
||||||
"https://github.com/docker/compose/releases/download/v5.0.2/docker-compose-linux-armv6.sbom.json",
|
"https://github.com/docker/compose/releases/download/v5.1.0/docker-compose-linux-aarch64.sigstore.json",
|
||||||
"https://github.com/docker/compose/releases/download/v5.0.2/docker-compose-linux-armv6.sha256",
|
"https://github.com/docker/compose/releases/download/v5.1.0/docker-compose-linux-armv6",
|
||||||
"https://github.com/docker/compose/releases/download/v5.0.2/docker-compose-linux-armv7",
|
"https://github.com/docker/compose/releases/download/v5.1.0/docker-compose-linux-armv6.provenance.json",
|
||||||
"https://github.com/docker/compose/releases/download/v5.0.2/docker-compose-linux-armv7.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.0.2/docker-compose-linux-armv7.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.0.2/docker-compose-linux-armv7.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.0.2/docker-compose-linux-ppc64le",
|
"https://github.com/docker/compose/releases/download/v5.1.0/docker-compose-linux-armv7",
|
||||||
"https://github.com/docker/compose/releases/download/v5.0.2/docker-compose-linux-ppc64le.provenance.json",
|
"https://github.com/docker/compose/releases/download/v5.1.0/docker-compose-linux-armv7.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.1.0/docker-compose-linux-armv7.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.1.0/docker-compose-linux-armv7.sha256",
|
||||||
"https://github.com/docker/compose/releases/download/v5.0.2/docker-compose-linux-riscv64",
|
"https://github.com/docker/compose/releases/download/v5.1.0/docker-compose-linux-armv7.sigstore.json",
|
||||||
"https://github.com/docker/compose/releases/download/v5.0.2/docker-compose-linux-riscv64.provenance.json",
|
"https://github.com/docker/compose/releases/download/v5.1.0/docker-compose-linux-ppc64le",
|
||||||
"https://github.com/docker/compose/releases/download/v5.0.2/docker-compose-linux-riscv64.sbom.json",
|
"https://github.com/docker/compose/releases/download/v5.1.0/docker-compose-linux-ppc64le.provenance.json",
|
||||||
"https://github.com/docker/compose/releases/download/v5.0.2/docker-compose-linux-riscv64.sha256",
|
"https://github.com/docker/compose/releases/download/v5.1.0/docker-compose-linux-ppc64le.sbom.json",
|
||||||
"https://github.com/docker/compose/releases/download/v5.0.2/docker-compose-linux-s390x",
|
"https://github.com/docker/compose/releases/download/v5.1.0/docker-compose-linux-ppc64le.sha256",
|
||||||
"https://github.com/docker/compose/releases/download/v5.0.2/docker-compose-linux-s390x.provenance.json",
|
"https://github.com/docker/compose/releases/download/v5.1.0/docker-compose-linux-ppc64le.sigstore.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.1.0/docker-compose-linux-riscv64",
|
||||||
"https://github.com/docker/compose/releases/download/v5.0.2/docker-compose-linux-s390x.sha256",
|
"https://github.com/docker/compose/releases/download/v5.1.0/docker-compose-linux-riscv64.provenance.json",
|
||||||
"https://github.com/docker/compose/releases/download/v5.0.2/docker-compose-linux-x86_64",
|
"https://github.com/docker/compose/releases/download/v5.1.0/docker-compose-linux-riscv64.sbom.json",
|
||||||
"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.1.0/docker-compose-linux-riscv64.sha256",
|
||||||
"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.1.0/docker-compose-linux-riscv64.sigstore.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.1.0/docker-compose-linux-s390x",
|
||||||
"https://github.com/docker/compose/releases/download/v5.0.2/docker-compose-windows-aarch64.exe",
|
"https://github.com/docker/compose/releases/download/v5.1.0/docker-compose-linux-s390x.provenance.json",
|
||||||
"https://github.com/docker/compose/releases/download/v5.0.2/docker-compose-windows-aarch64.exe.sha256",
|
"https://github.com/docker/compose/releases/download/v5.1.0/docker-compose-linux-s390x.sbom.json",
|
||||||
"https://github.com/docker/compose/releases/download/v5.0.2/docker-compose-windows-aarch64.provenance.json",
|
"https://github.com/docker/compose/releases/download/v5.1.0/docker-compose-linux-s390x.sha256",
|
||||||
"https://github.com/docker/compose/releases/download/v5.0.2/docker-compose-windows-aarch64.sbom.json",
|
"https://github.com/docker/compose/releases/download/v5.1.0/docker-compose-linux-s390x.sigstore.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.1.0/docker-compose-linux-x86_64",
|
||||||
"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.1.0/docker-compose-linux-x86_64.provenance.json",
|
||||||
"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.1.0/docker-compose-linux-x86_64.sbom.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/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": {
|
"v5.0.0-rc.2": {
|
||||||
|
|||||||
434
.github/cosign-releases.json
vendored
434
.github/cosign-releases.json
vendored
@@ -1,92 +1,182 @@
|
|||||||
{
|
{
|
||||||
"latest": {
|
"latest": {
|
||||||
"id": 275625037,
|
"id": 288413621,
|
||||||
"tag_name": "v3.0.4",
|
"tag_name": "v3.0.5",
|
||||||
"html_url": "https://github.com/sigstore/cosign/releases/tag/v3.0.4",
|
"html_url": "https://github.com/sigstore/cosign/releases/tag/v3.0.5",
|
||||||
"assets": [
|
"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.5/cosign-3.0.5-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.5/cosign-3.0.5-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.5/cosign-3.0.5-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.5/cosign-3.0.5-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.5/cosign-3.0.5-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.5/cosign-3.0.5-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.5/cosign-3.0.5-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.5/cosign-3.0.5-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.5/cosign-3.0.5-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.5/cosign-3.0.5-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.5/cosign-3.0.5-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.5/cosign-3.0.5-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.5/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.5/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.5/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.5/cosign-darwin-amd64_3.0.5_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.5/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.5/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.5/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.5/cosign-darwin-arm64_3.0.5_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.5/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.5/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.5/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.5/cosign-linux-amd64_3.0.5_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.5/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.5/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.5/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.5/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.5/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.5/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.5/cosign-linux-arm64_3.0.5_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.5/cosign-linux-arm_3.0.5_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.5/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.5/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.5/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.5/cosign-linux-pivkey-pkcs11key-amd64_3.0.5_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.5/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.5/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.5/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.5/cosign-linux-pivkey-pkcs11key-arm64_3.0.5_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.5/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.5/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.5/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.5/cosign-linux-ppc64le_3.0.5_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.5/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.5/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.5/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.5/cosign-linux-riscv64_3.0.5_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.5/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.5/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.5/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.5/cosign-linux-s390x_3.0.5_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.5/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.5/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.5/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.5/cosign-windows-amd64.exe_3.0.5_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.5/cosign_3.0.5_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.5/cosign_3.0.5_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.5/cosign_3.0.5_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.5/cosign_3.0.5_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.5/cosign_3.0.5_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.5/cosign_3.0.5_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.5/cosign_3.0.5_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.5/cosign_3.0.5_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.5/cosign_3.0.5_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.5/cosign_3.0.5_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.5/cosign_3.0.5_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.5/cosign_3.0.5_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.5/cosign_3.0.5_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.5/cosign_3.0.5_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.5/cosign_3.0.5_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.5/cosign_3.0.5_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.5/cosign_3.0.5_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.5/cosign_3.0.5_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.5/cosign_3.0.5_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.5/cosign_3.0.5_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.5/cosign_3.0.5_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.5/cosign_3.0.5_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.5/cosign_3.0.5_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.5/cosign_3.0.5_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.5/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.5/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/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": {
|
"v3.0.4": {
|
||||||
@@ -3406,93 +3496,93 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"edge": {
|
"edge": {
|
||||||
"id": 275625037,
|
"id": 288413621,
|
||||||
"tag_name": "v3.0.4",
|
"tag_name": "v3.0.5",
|
||||||
"html_url": "https://github.com/sigstore/cosign/releases/tag/v3.0.4",
|
"html_url": "https://github.com/sigstore/cosign/releases/tag/v3.0.5",
|
||||||
"assets": [
|
"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.5/cosign-3.0.5-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.5/cosign-3.0.5-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.5/cosign-3.0.5-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.5/cosign-3.0.5-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.5/cosign-3.0.5-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.5/cosign-3.0.5-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.5/cosign-3.0.5-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.5/cosign-3.0.5-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.5/cosign-3.0.5-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.5/cosign-3.0.5-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.5/cosign-3.0.5-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.5/cosign-3.0.5-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.5/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.5/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.5/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.5/cosign-darwin-amd64_3.0.5_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.5/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.5/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.5/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.5/cosign-darwin-arm64_3.0.5_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.5/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.5/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.5/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.5/cosign-linux-amd64_3.0.5_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.5/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.5/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.5/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.5/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.5/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.5/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.5/cosign-linux-arm64_3.0.5_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.5/cosign-linux-arm_3.0.5_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.5/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.5/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.5/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.5/cosign-linux-pivkey-pkcs11key-amd64_3.0.5_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.5/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.5/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.5/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.5/cosign-linux-pivkey-pkcs11key-arm64_3.0.5_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.5/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.5/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.5/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.5/cosign-linux-ppc64le_3.0.5_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.5/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.5/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.5/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.5/cosign-linux-riscv64_3.0.5_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.5/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.5/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.5/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.5/cosign-linux-s390x_3.0.5_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.5/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.5/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.5/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.5/cosign-windows-amd64.exe_3.0.5_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.5/cosign_3.0.5_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.5/cosign_3.0.5_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.5/cosign_3.0.5_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.5/cosign_3.0.5_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.5/cosign_3.0.5_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.5/cosign_3.0.5_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.5/cosign_3.0.5_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.5/cosign_3.0.5_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.5/cosign_3.0.5_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.5/cosign_3.0.5_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.5/cosign_3.0.5_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.5/cosign_3.0.5_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.5/cosign_3.0.5_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.5/cosign_3.0.5_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.5/cosign_3.0.5_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.5/cosign_3.0.5_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.5/cosign_3.0.5_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.5/cosign_3.0.5_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.5/cosign_3.0.5_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.5/cosign_3.0.5_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.5/cosign_3.0.5_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.5/cosign_3.0.5_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.5/cosign_3.0.5_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.5/cosign_3.0.5_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.5/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.5/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/release-cosign.pub"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"v2.0.0-rc.3": {
|
"v2.0.0-rc.3": {
|
||||||
|
|||||||
4
.github/dependabot.yml
vendored
4
.github/dependabot.yml
vendored
@@ -16,10 +16,6 @@ updates:
|
|||||||
versioning-strategy: "increase"
|
versioning-strategy: "increase"
|
||||||
allow:
|
allow:
|
||||||
- dependency-type: "production"
|
- 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:
|
labels:
|
||||||
- "dependencies"
|
- "dependencies"
|
||||||
- "bot"
|
- "bot"
|
||||||
|
|||||||
30
.github/docker-releases.json
vendored
30
.github/docker-releases.json
vendored
@@ -1,17 +1,29 @@
|
|||||||
{
|
{
|
||||||
"latest": {
|
"latest": {
|
||||||
"id": 280041206,
|
"id": 282275652,
|
||||||
"tag_name": "docker-v29.2.0",
|
"tag_name": "docker-v29.2.1",
|
||||||
"html_url": "https://github.com/moby/moby/releases/tag/docker-v29.2.0",
|
"html_url": "https://github.com/moby/moby/releases/tag/docker-v29.2.1",
|
||||||
"assets": []
|
|
||||||
},
|
|
||||||
"v29.2.0": {
|
|
||||||
"id": 280041206,
|
|
||||||
"tag_name": "docker-v29.2.0",
|
|
||||||
"html_url": "https://github.com/moby/moby/releases/tag/docker-v29.2.0",
|
|
||||||
"assets": []
|
"assets": []
|
||||||
},
|
},
|
||||||
"edge": {
|
"edge": {
|
||||||
|
"id": 291481223,
|
||||||
|
"tag_name": "docker-v29.3.0-rc.1",
|
||||||
|
"html_url": "https://github.com/moby/moby/releases/tag/docker-v29.3.0-rc.1",
|
||||||
|
"assets": []
|
||||||
|
},
|
||||||
|
"v29.3.0-rc.1": {
|
||||||
|
"id": 291481223,
|
||||||
|
"tag_name": "docker-v29.3.0-rc.1",
|
||||||
|
"html_url": "https://github.com/moby/moby/releases/tag/docker-v29.3.0-rc.1",
|
||||||
|
"assets": []
|
||||||
|
},
|
||||||
|
"v29.2.1": {
|
||||||
|
"id": 282275652,
|
||||||
|
"tag_name": "docker-v29.2.1",
|
||||||
|
"html_url": "https://github.com/moby/moby/releases/tag/docker-v29.2.1",
|
||||||
|
"assets": []
|
||||||
|
},
|
||||||
|
"v29.2.0": {
|
||||||
"id": 280041206,
|
"id": 280041206,
|
||||||
"tag_name": "docker-v29.2.0",
|
"tag_name": "docker-v29.2.0",
|
||||||
"html_url": "https://github.com/moby/moby/releases/tag/docker-v29.2.0",
|
"html_url": "https://github.com/moby/moby/releases/tag/docker-v29.2.0",
|
||||||
|
|||||||
97
.github/regclient-releases.json
vendored
97
.github/regclient-releases.json
vendored
@@ -1,37 +1,72 @@
|
|||||||
{
|
{
|
||||||
"latest": {
|
"latest": {
|
||||||
"id": 268115419,
|
"id": 289583033,
|
||||||
"tag_name": "v0.11.1",
|
"tag_name": "v0.11.2",
|
||||||
"html_url": "https://github.com/regclient/regclient/releases/tag/v0.11.1",
|
"html_url": "https://github.com/regclient/regclient/releases/tag/v0.11.2",
|
||||||
"assets": [
|
"assets": [
|
||||||
"https://github.com/regclient/regclient/releases/download/v0.11.1/metadata.tgz",
|
"https://github.com/regclient/regclient/releases/download/v0.11.2/metadata.tgz",
|
||||||
"https://github.com/regclient/regclient/releases/download/v0.11.1/regbot-darwin-amd64",
|
"https://github.com/regclient/regclient/releases/download/v0.11.2/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.2/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.2/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.2/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.2/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.2/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.2/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.2/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.2/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.2/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.2/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.2/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.2/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.2/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.2/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.2/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.2/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.2/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.2/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.2/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.2/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.2/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.2/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.2/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.2/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.2/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/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": {
|
"v0.11.1": {
|
||||||
|
|||||||
1
.github/workflows/build.yml
vendored
1
.github/workflows/build.yml
vendored
@@ -21,7 +21,6 @@ jobs:
|
|||||||
node_version:
|
node_version:
|
||||||
- 24
|
- 24
|
||||||
- 20
|
- 20
|
||||||
- 18
|
|
||||||
steps:
|
steps:
|
||||||
-
|
-
|
||||||
name: Build
|
name: Build
|
||||||
|
|||||||
@@ -35,7 +35,7 @@ jobs:
|
|||||||
uses: actions/checkout@v6
|
uses: actions/checkout@v6
|
||||||
-
|
-
|
||||||
name: Download
|
name: Download
|
||||||
uses: actions/download-artifact@v7
|
uses: actions/download-artifact@v8
|
||||||
with:
|
with:
|
||||||
name: buildx-lab-releases-json
|
name: buildx-lab-releases-json
|
||||||
path: .github
|
path: .github
|
||||||
|
|||||||
2
.github/workflows/buildx-releases-json.yml
vendored
2
.github/workflows/buildx-releases-json.yml
vendored
@@ -35,7 +35,7 @@ jobs:
|
|||||||
uses: actions/checkout@v6
|
uses: actions/checkout@v6
|
||||||
-
|
-
|
||||||
name: Download
|
name: Download
|
||||||
uses: actions/download-artifact@v7
|
uses: actions/download-artifact@v8
|
||||||
with:
|
with:
|
||||||
name: buildx-releases-json
|
name: buildx-releases-json
|
||||||
path: .github
|
path: .github
|
||||||
|
|||||||
2
.github/workflows/codeql.yml
vendored
2
.github/workflows/codeql.yml
vendored
@@ -12,7 +12,7 @@ permissions:
|
|||||||
security-events: write
|
security-events: write
|
||||||
|
|
||||||
env:
|
env:
|
||||||
NODE_VERSION: 20
|
NODE_VERSION: "24"
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
analyze:
|
analyze:
|
||||||
|
|||||||
@@ -35,7 +35,7 @@ jobs:
|
|||||||
uses: actions/checkout@v6
|
uses: actions/checkout@v6
|
||||||
-
|
-
|
||||||
name: Download
|
name: Download
|
||||||
uses: actions/download-artifact@v7
|
uses: actions/download-artifact@v8
|
||||||
with:
|
with:
|
||||||
name: compose-lab-releases-json
|
name: compose-lab-releases-json
|
||||||
path: .github
|
path: .github
|
||||||
|
|||||||
2
.github/workflows/compose-releases-json.yml
vendored
2
.github/workflows/compose-releases-json.yml
vendored
@@ -35,7 +35,7 @@ jobs:
|
|||||||
uses: actions/checkout@v6
|
uses: actions/checkout@v6
|
||||||
-
|
-
|
||||||
name: Download
|
name: Download
|
||||||
uses: actions/download-artifact@v7
|
uses: actions/download-artifact@v8
|
||||||
with:
|
with:
|
||||||
name: compose-releases-json
|
name: compose-releases-json
|
||||||
path: .github
|
path: .github
|
||||||
|
|||||||
2
.github/workflows/cosign-releases-json.yml
vendored
2
.github/workflows/cosign-releases-json.yml
vendored
@@ -35,7 +35,7 @@ jobs:
|
|||||||
uses: actions/checkout@v6
|
uses: actions/checkout@v6
|
||||||
-
|
-
|
||||||
name: Download
|
name: Download
|
||||||
uses: actions/download-artifact@v7
|
uses: actions/download-artifact@v8
|
||||||
with:
|
with:
|
||||||
name: cosign-releases-json
|
name: cosign-releases-json
|
||||||
path: .github
|
path: .github
|
||||||
|
|||||||
2
.github/workflows/docker-releases-json.yml
vendored
2
.github/workflows/docker-releases-json.yml
vendored
@@ -38,7 +38,7 @@ jobs:
|
|||||||
uses: actions/checkout@v6
|
uses: actions/checkout@v6
|
||||||
-
|
-
|
||||||
name: Download
|
name: Download
|
||||||
uses: actions/download-artifact@v7
|
uses: actions/download-artifact@v8
|
||||||
with:
|
with:
|
||||||
name: docker-releases-json
|
name: docker-releases-json
|
||||||
path: .github
|
path: .github
|
||||||
|
|||||||
2
.github/workflows/publish.yml
vendored
2
.github/workflows/publish.yml
vendored
@@ -14,7 +14,7 @@ on:
|
|||||||
- 'v*'
|
- 'v*'
|
||||||
|
|
||||||
env:
|
env:
|
||||||
NODE_VERSION: "24" # at least Node 24 is required for Trusted Publishing with OIDC
|
NODE_VERSION: "24"
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
publish:
|
publish:
|
||||||
|
|||||||
@@ -35,7 +35,7 @@ jobs:
|
|||||||
uses: actions/checkout@v6
|
uses: actions/checkout@v6
|
||||||
-
|
-
|
||||||
name: Download
|
name: Download
|
||||||
uses: actions/download-artifact@v7
|
uses: actions/download-artifact@v8
|
||||||
with:
|
with:
|
||||||
name: regclient-releases-json
|
name: regclient-releases-json
|
||||||
path: .github
|
path: .github
|
||||||
|
|||||||
12
.github/workflows/test.yml
vendored
12
.github/workflows/test.yml
vendored
@@ -14,9 +14,9 @@ on:
|
|||||||
- '.github/*-releases.json'
|
- '.github/*-releases.json'
|
||||||
|
|
||||||
env:
|
env:
|
||||||
NODE_VERSION: "20"
|
NODE_VERSION: "24"
|
||||||
BUILDX_VERSION: "v0.31.0"
|
BUILDX_VERSION: "v0.32.0-rc2"
|
||||||
BUILDKIT_IMAGE: "moby/buildkit:v0.27.0"
|
BUILDKIT_IMAGE: "moby/buildkit:v0.28.0-rc2"
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
test:
|
test:
|
||||||
@@ -30,7 +30,6 @@ jobs:
|
|||||||
node_version:
|
node_version:
|
||||||
- 24
|
- 24
|
||||||
- 20
|
- 20
|
||||||
- 18
|
|
||||||
steps:
|
steps:
|
||||||
-
|
-
|
||||||
name: Checkout
|
name: Checkout
|
||||||
@@ -44,6 +43,7 @@ jobs:
|
|||||||
env:
|
env:
|
||||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
NODE_VERSION: ${{ matrix.node_version }}
|
NODE_VERSION: ${{ matrix.node_version }}
|
||||||
|
DOCKER_BUILD_SUMMARY: false
|
||||||
-
|
-
|
||||||
name: Check coverage
|
name: Check coverage
|
||||||
run: |
|
run: |
|
||||||
@@ -156,7 +156,7 @@ jobs:
|
|||||||
uses: actions/checkout@v6
|
uses: actions/checkout@v6
|
||||||
-
|
-
|
||||||
name: Expose GitHub Runtime
|
name: Expose GitHub Runtime
|
||||||
uses: crazy-max/ghaction-github-runtime@v3
|
uses: crazy-max/ghaction-github-runtime@v4
|
||||||
-
|
-
|
||||||
# FIXME: Needs to setup node twice on Windows: https://github.com/actions/setup-node/issues/1357#issuecomment-3254613964
|
# FIXME: Needs to setup node twice on Windows: https://github.com/actions/setup-node/issues/1357#issuecomment-3254613964
|
||||||
name: Setup Node
|
name: Setup Node
|
||||||
@@ -205,7 +205,7 @@ jobs:
|
|||||||
if (testName) {
|
if (testName) {
|
||||||
args.push(`--testNamePattern=^${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);
|
await exec.exec('yarn', args);
|
||||||
env:
|
env:
|
||||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
|||||||
2
.github/workflows/undock-releases-json.yml
vendored
2
.github/workflows/undock-releases-json.yml
vendored
@@ -35,7 +35,7 @@ jobs:
|
|||||||
uses: actions/checkout@v6
|
uses: actions/checkout@v6
|
||||||
-
|
-
|
||||||
name: Download
|
name: Download
|
||||||
uses: actions/download-artifact@v7
|
uses: actions/download-artifact@v8
|
||||||
with:
|
with:
|
||||||
name: undock-releases-json
|
name: undock-releases-json
|
||||||
path: .github
|
path: .github
|
||||||
|
|||||||
7
.gitignore
vendored
7
.gitignore
vendored
@@ -38,13 +38,6 @@ jspm_packages/
|
|||||||
# Yarn Integrity file
|
# Yarn Integrity file
|
||||||
.yarn-integrity
|
.yarn-integrity
|
||||||
|
|
||||||
# dotenv environment variable files
|
|
||||||
.env
|
|
||||||
.env.development.local
|
|
||||||
.env.test.local
|
|
||||||
.env.production.local
|
|
||||||
.env.local
|
|
||||||
|
|
||||||
# yarn v2
|
# yarn v2
|
||||||
.yarn/cache
|
.yarn/cache
|
||||||
.yarn/unplugged
|
.yarn/unplugged
|
||||||
|
|||||||
@@ -6,6 +6,5 @@
|
|||||||
"singleQuote": true,
|
"singleQuote": true,
|
||||||
"trailingComma": "none",
|
"trailingComma": "none",
|
||||||
"bracketSpacing": false,
|
"bracketSpacing": false,
|
||||||
"arrowParens": "avoid",
|
"arrowParens": "avoid"
|
||||||
"parser": "typescript"
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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();
|
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
/**
|
/**
|
||||||
* Copyright 2023 actions-toolkit authors
|
* Copyright 2025 actions-toolkit authors
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
@@ -14,18 +14,17 @@
|
|||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
module.exports = {
|
import {vi} from 'vitest';
|
||||||
testEnvironment: 'node',
|
import os from 'os';
|
||||||
moduleFileExtensions: ['js', 'ts'],
|
|
||||||
setupFiles: ['dotenv/config'],
|
export const mockPlatform = (platform: NodeJS.Platform) => {
|
||||||
testMatch: ['**/*.test.itg.ts'],
|
return vi.spyOn(os, 'platform').mockImplementation(() => platform);
|
||||||
testTimeout: 1800000, // 30 minutes
|
};
|
||||||
transform: {
|
|
||||||
'^.+\\.ts$': 'ts-jest'
|
export const mockArch = (arch: string) => {
|
||||||
},
|
return vi.spyOn(os, 'arch').mockImplementation(() => arch);
|
||||||
moduleNameMapper: {
|
};
|
||||||
'^csv-parse/sync': '<rootDir>/node_modules/csv-parse/dist/cjs/sync.cjs'
|
|
||||||
},
|
export const mockHomedir = (dir: string) => {
|
||||||
testResultsProcessor: '<rootDir>/__tests__/testResultsProcessor.js',
|
return vi.spyOn(os, 'homedir').mockImplementation(() => dir);
|
||||||
verbose: false
|
|
||||||
};
|
};
|
||||||
38
__tests__/.setup/list-itg-tests.mjs
Normal file
38
__tests__/.setup/list-itg-tests.mjs
Normal 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`);
|
||||||
242
__tests__/.setup/setup.unit.ts
Normal file
242
__tests__/.setup/setup.unit.ts
Normal 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()
|
||||||
|
}));
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
/**
|
/**
|
||||||
* Copyright 2023 actions-toolkit authors
|
* Copyright 2026 actions-toolkit authors
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
@@ -14,6 +14,6 @@
|
|||||||
* limitations under the License.
|
* 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;
|
||||||
59
__tests__/.setup/skipped-reporter.mjs
Normal file
59
__tests__/.setup/skipped-reporter.mjs
Normal 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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
};
|
||||||
@@ -14,14 +14,14 @@
|
|||||||
* limitations under the License.
|
* 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 {BuildKit} from '../../src/buildkit/buildkit.js';
|
||||||
import {Builder} from '../../src/buildx/builder';
|
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 {
|
return {
|
||||||
name: 'builder2',
|
name: 'builder2',
|
||||||
driver: 'docker-container',
|
driver: 'docker-container',
|
||||||
@@ -54,7 +54,7 @@ describe('satisfies', () => {
|
|||||||
test.each([
|
test.each([
|
||||||
['builder2', '>=0.10.0', true],
|
['builder2', '>=0.10.0', true],
|
||||||
['builder2', '>0.11.0', false]
|
['builder2', '>0.11.0', false]
|
||||||
])('given %p', async (builderName, range, expected) => {
|
])('given %o', async (builderName, range, expected) => {
|
||||||
const buildkit = new BuildKit();
|
const buildkit = new BuildKit();
|
||||||
expect(await buildkit.versionSatisfies(builderName, range)).toBe(expected);
|
expect(await buildkit.versionSatisfies(builderName, range)).toBe(expected);
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -14,25 +14,25 @@
|
|||||||
* limitations under the License.
|
* 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 fs from 'fs';
|
||||||
import os from 'os';
|
import os from 'os';
|
||||||
import path from 'path';
|
import path from 'path';
|
||||||
import * as rimraf from 'rimraf';
|
import * as rimraf from 'rimraf';
|
||||||
|
|
||||||
import {BuildKit} from '../../src/buildkit/buildkit';
|
import {BuildKit} from '../../src/buildkit/buildkit.js';
|
||||||
import {Context} from '../../src/context';
|
import {Context} from '../../src/context.js';
|
||||||
|
|
||||||
const fixturesDir = path.join(__dirname, '..', '.fixtures');
|
const fixturesDir = path.join(__dirname, '..', '.fixtures');
|
||||||
const tmpDir = fs.mkdtempSync(path.join(process.env.TEMP || os.tmpdir(), 'buildkit-config-'));
|
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});
|
fs.mkdirSync(tmpDir, {recursive: true});
|
||||||
return tmpDir;
|
return tmpDir;
|
||||||
});
|
});
|
||||||
|
|
||||||
jest.spyOn(Context, 'tmpName').mockImplementation((): string => {
|
vi.spyOn(Context, 'tmpName').mockImplementation((): string => {
|
||||||
return tmpName;
|
return tmpName;
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -53,7 +53,7 @@ describe('resolve', () => {
|
|||||||
`,
|
`,
|
||||||
null
|
null
|
||||||
]
|
]
|
||||||
])('given %p config', async (val: string, file: boolean, exValue: string, error: Error | null) => {
|
])('given %o config', async (val: string, file: boolean, exValue: string, error: Error | null) => {
|
||||||
try {
|
try {
|
||||||
const buildkit = new BuildKit();
|
const buildkit = new BuildKit();
|
||||||
let config: string;
|
let config: string;
|
||||||
@@ -66,7 +66,7 @@ describe('resolve', () => {
|
|||||||
const configValue = fs.readFileSync(tmpName, 'utf-8');
|
const configValue = fs.readFileSync(tmpName, 'utf-8');
|
||||||
expect(configValue).toEqual(exValue);
|
expect(configValue).toEqual(exValue);
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
// eslint-disable-next-line jest/no-conditional-expect
|
// eslint-disable-next-line vitest/no-conditional-expect
|
||||||
expect(e.message).toEqual(error?.message);
|
expect(e.message).toEqual(error?.message);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -14,14 +14,14 @@
|
|||||||
* limitations under the License.
|
* 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(() => {
|
beforeEach(() => {
|
||||||
jest.restoreAllMocks();
|
vi.restoreAllMocks();
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('parseURL', () => {
|
describe('parseURL', () => {
|
||||||
@@ -181,7 +181,7 @@ describe('parseURL', () => {
|
|||||||
} as GitURL,
|
} as GitURL,
|
||||||
false
|
false
|
||||||
],
|
],
|
||||||
])('given %p', async (ref: string, expected: GitURL, expectedErr: boolean) => {
|
])('given %o', async (ref: string, expected: GitURL, expectedErr: boolean) => {
|
||||||
try {
|
try {
|
||||||
const got = Git.parseURL(ref);
|
const got = Git.parseURL(ref);
|
||||||
expect(got.scheme).toEqual(expected.scheme);
|
expect(got.scheme).toEqual(expected.scheme);
|
||||||
@@ -195,7 +195,7 @@ describe('parseURL', () => {
|
|||||||
if (!expectedErr) {
|
if (!expectedErr) {
|
||||||
console.log(err);
|
console.log(err);
|
||||||
}
|
}
|
||||||
// eslint-disable-next-line jest/no-conditional-expect
|
// eslint-disable-next-line vitest/no-conditional-expect
|
||||||
expect(expectedErr).toBeTruthy();
|
expect(expectedErr).toBeTruthy();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@@ -329,7 +329,7 @@ describe('parseRef', () => {
|
|||||||
'.git',
|
'.git',
|
||||||
undefined
|
undefined
|
||||||
],
|
],
|
||||||
])('given %p', async (ref: string, expected: GitRef | undefined) => {
|
])('given %o', async (ref: string, expected: GitRef | undefined) => {
|
||||||
try {
|
try {
|
||||||
const got = Git.parseRef(ref);
|
const got = Git.parseRef(ref);
|
||||||
expect(got).toEqual(expected);
|
expect(got).toEqual(expected);
|
||||||
@@ -337,7 +337,7 @@ describe('parseRef', () => {
|
|||||||
if (expected) {
|
if (expected) {
|
||||||
console.log(err);
|
console.log(err);
|
||||||
}
|
}
|
||||||
// eslint-disable-next-line jest/no-conditional-expect
|
// eslint-disable-next-line vitest/no-conditional-expect
|
||||||
expect(expected).toBeUndefined();
|
expect(expected).toBeUndefined();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -14,12 +14,12 @@
|
|||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import {describe, expect, test} from '@jest/globals';
|
import {describe, expect, test} from 'vitest';
|
||||||
import * as fs from 'fs';
|
import * as fs from 'fs';
|
||||||
import * as path from 'path';
|
import * as path from 'path';
|
||||||
|
|
||||||
import {Bake} from '../../src/buildx/bake';
|
import {Bake} from '../../src/buildx/bake.js';
|
||||||
import {BakeDefinition} from '../../src/types/buildx/bake';
|
import {BakeDefinition} from '../../src/types/buildx/bake.js';
|
||||||
|
|
||||||
const fixturesDir = path.join(__dirname, '..', '.fixtures');
|
const fixturesDir = path.join(__dirname, '..', '.fixtures');
|
||||||
|
|
||||||
@@ -41,7 +41,7 @@ maybe('getDefinition', () => {
|
|||||||
// path.join(fixturesDir, 'bake-test-docker-action-remote-private.json'),
|
// path.join(fixturesDir, 'bake-test-docker-action-remote-private.json'),
|
||||||
// true,
|
// true,
|
||||||
// ]
|
// ]
|
||||||
])('given %p', async (source: string, targets: string[], out: string, auth) => {
|
])('given %o', async (source: string, targets: string[], out: string, auth) => {
|
||||||
const gitAuthToken = process.env.GITHUB_TOKEN || '';
|
const gitAuthToken = process.env.GITHUB_TOKEN || '';
|
||||||
if (auth && !gitAuthToken) {
|
if (auth && !gitAuthToken) {
|
||||||
console.log(`Git auth token not available, skipping test`);
|
console.log(`Git auth token not available, skipping test`);
|
||||||
|
|||||||
@@ -14,30 +14,30 @@
|
|||||||
* limitations under the License.
|
* 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 fs from 'fs';
|
||||||
import os from 'os';
|
import os from 'os';
|
||||||
import path from 'path';
|
import path from 'path';
|
||||||
import * as rimraf from 'rimraf';
|
import * as rimraf from 'rimraf';
|
||||||
|
|
||||||
import {Bake} from '../../src/buildx/bake';
|
import {Bake} from '../../src/buildx/bake.js';
|
||||||
import {Context} from '../../src/context';
|
import {Context} from '../../src/context.js';
|
||||||
|
|
||||||
import {ExecOptions} from '@actions/exec';
|
import {ExecOptions} from '@actions/exec';
|
||||||
import {BakeDefinition} from '../../src/types/buildx/bake';
|
import {BakeDefinition} from '../../src/types/buildx/bake.js';
|
||||||
import {BuildMetadata} from '../../src/types/buildx/build';
|
import {BuildMetadata} from '../../src/types/buildx/build.js';
|
||||||
|
|
||||||
const fixturesDir = path.join(__dirname, '..', '.fixtures');
|
const fixturesDir = path.join(__dirname, '..', '.fixtures');
|
||||||
const tmpDir = fs.mkdtempSync(path.join(process.env.TEMP || os.tmpdir(), 'buildx-bake-'));
|
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'));
|
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});
|
fs.mkdirSync(tmpDir, {recursive: true});
|
||||||
return tmpDir;
|
return tmpDir;
|
||||||
});
|
});
|
||||||
|
|
||||||
jest.spyOn(Context, 'tmpName').mockImplementation((): string => {
|
vi.spyOn(Context, 'tmpName').mockImplementation((): string => {
|
||||||
return tmpName;
|
return tmpName;
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -102,7 +102,7 @@ describe('getDefinition', () => {
|
|||||||
undefined,
|
undefined,
|
||||||
path.join(fixturesDir, 'bake-03-default.json')
|
path.join(fixturesDir, 'bake-03-default.json')
|
||||||
],
|
],
|
||||||
])('given %p', async (files: string[], targets: string[], overrides: string[], execOptions: ExecOptions | undefined, out: string) => {
|
])('given %o', async (files: string[], targets: string[], overrides: string[], execOptions: ExecOptions | undefined, out: string) => {
|
||||||
const bake = new Bake();
|
const bake = new Bake();
|
||||||
const expectedDef = <BakeDefinition>JSON.parse(fs.readFileSync(out, {encoding: 'utf-8'}).trim())
|
const expectedDef = <BakeDefinition>JSON.parse(fs.readFileSync(out, {encoding: 'utf-8'}).trim())
|
||||||
expect(await bake.getDefinition({
|
expect(await bake.getDefinition({
|
||||||
@@ -185,7 +185,7 @@ describe('hasLocalExporter', () => {
|
|||||||
} as unknown as BakeDefinition,
|
} as unknown as BakeDefinition,
|
||||||
true
|
true
|
||||||
]
|
]
|
||||||
])('given %o returns %p', async (def: BakeDefinition, expected: boolean) => {
|
])('given %o returns %o', async (def: BakeDefinition, expected: boolean) => {
|
||||||
expect(Bake.hasLocalExporter(def)).toEqual(expected);
|
expect(Bake.hasLocalExporter(def)).toEqual(expected);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
@@ -285,7 +285,7 @@ describe('hasTarExporter', () => {
|
|||||||
} as unknown as BakeDefinition,
|
} as unknown as BakeDefinition,
|
||||||
false
|
false
|
||||||
],
|
],
|
||||||
])('given %o returns %p', async (def: BakeDefinition, expected: boolean) => {
|
])('given %o returns %o', async (def: BakeDefinition, expected: boolean) => {
|
||||||
expect(Bake.hasTarExporter(def)).toEqual(expected);
|
expect(Bake.hasTarExporter(def)).toEqual(expected);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
@@ -440,7 +440,7 @@ describe('hasDockerExporter', () => {
|
|||||||
true,
|
true,
|
||||||
true
|
true
|
||||||
],
|
],
|
||||||
])('given %o and load:%p returns %p', async (def: BakeDefinition, expected: boolean, load: boolean | undefined) => {
|
])('given %o and load: %o returns %o', async (def: BakeDefinition, expected: boolean, load: boolean | undefined) => {
|
||||||
expect(Bake.hasDockerExporter(def, load)).toEqual(expected);
|
expect(Bake.hasDockerExporter(def, load)).toEqual(expected);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
@@ -481,7 +481,7 @@ describe('hasGitAuthTokenSecret', () => {
|
|||||||
} as unknown as BakeDefinition,
|
} as unknown as BakeDefinition,
|
||||||
true
|
true
|
||||||
],
|
],
|
||||||
])('given %o returns %p', async (def: BakeDefinition, expected: boolean) => {
|
])('given %o returns %o', async (def: BakeDefinition, expected: boolean) => {
|
||||||
expect(Bake.hasGitAuthTokenSecret(def)).toEqual(expected);
|
expect(Bake.hasGitAuthTokenSecret(def)).toEqual(expected);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
@@ -536,7 +536,7 @@ describe('hasProvenanceAttestation', () => {
|
|||||||
} as unknown as BakeDefinition,
|
} as unknown as BakeDefinition,
|
||||||
true
|
true
|
||||||
]
|
]
|
||||||
])('given %o returns %p', async (def: BakeDefinition, expected: boolean) => {
|
])('given %o returns %o', async (def: BakeDefinition, expected: boolean) => {
|
||||||
expect(Bake.hasProvenanceAttestation(def)).toEqual(expected);
|
expect(Bake.hasProvenanceAttestation(def)).toEqual(expected);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
@@ -591,7 +591,7 @@ describe('hasSBOMAttestation', () => {
|
|||||||
} as unknown as BakeDefinition,
|
} as unknown as BakeDefinition,
|
||||||
true
|
true
|
||||||
]
|
]
|
||||||
])('given %o returns %p', async (def: BakeDefinition, expected: boolean) => {
|
])('given %o returns %o', async (def: BakeDefinition, expected: boolean) => {
|
||||||
expect(Bake.hasSBOMAttestation(def)).toEqual(expected);
|
expect(Bake.hasSBOMAttestation(def)).toEqual(expected);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -14,26 +14,26 @@
|
|||||||
* limitations under the License.
|
* 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 fs from 'fs';
|
||||||
import os from 'os';
|
import os from 'os';
|
||||||
import path from 'path';
|
import path from 'path';
|
||||||
import * as rimraf from 'rimraf';
|
import * as rimraf from 'rimraf';
|
||||||
|
|
||||||
import {Context} from '../../src/context';
|
import {Context} from '../../src/context.js';
|
||||||
import {Build} from '../../src/buildx/build';
|
import {Build} from '../../src/buildx/build.js';
|
||||||
|
|
||||||
const fixturesDir = path.join(__dirname, '..', '.fixtures');
|
const fixturesDir = path.join(__dirname, '..', '.fixtures');
|
||||||
const tmpDir = fs.mkdtempSync(path.join(process.env.TEMP || os.tmpdir(), 'buildx-build-'));
|
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'));
|
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});
|
fs.mkdirSync(tmpDir, {recursive: true});
|
||||||
return tmpDir;
|
return tmpDir;
|
||||||
});
|
});
|
||||||
|
|
||||||
jest.spyOn(Context, 'tmpName').mockImplementation((): string => {
|
vi.spyOn(Context, 'tmpName').mockImplementation((): string => {
|
||||||
return tmpName;
|
return tmpName;
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -136,7 +136,7 @@ describe('getProvenanceInput', () => {
|
|||||||
'',
|
'',
|
||||||
''
|
''
|
||||||
],
|
],
|
||||||
])('given input %p', async (input: string, expected: string) => {
|
])('given input %o', async (input: string, expected: string) => {
|
||||||
setInput('provenance', input);
|
setInput('provenance', input);
|
||||||
expect(Build.getProvenanceInput('provenance')).toEqual(expected);
|
expect(Build.getProvenanceInput('provenance')).toEqual(expected);
|
||||||
});
|
});
|
||||||
@@ -165,7 +165,7 @@ describe('resolveProvenanceAttrs', () => {
|
|||||||
'',
|
'',
|
||||||
'builder-id=https://github.com/docker/actions-toolkit/actions/runs/2188748038/attempts/2'
|
'builder-id=https://github.com/docker/actions-toolkit/actions/runs/2188748038/attempts/2'
|
||||||
],
|
],
|
||||||
])('given %p', async (input: string, expected: string) => {
|
])('given %o', async (input: string, expected: string) => {
|
||||||
expect(Build.resolveProvenanceAttrs(input)).toEqual(expected);
|
expect(Build.resolveProvenanceAttrs(input)).toEqual(expected);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
@@ -180,7 +180,7 @@ describe('resolveSecret', () => {
|
|||||||
['=bbbbbbb', false, '', '', new Error('=bbbbbbb is not a valid secret')],
|
['=bbbbbbb', false, '', '', new Error('=bbbbbbb is not a valid secret')],
|
||||||
[`foo=${path.join(fixturesDir, 'secret.txt')}`, true, 'foo', 'bar', null],
|
[`foo=${path.join(fixturesDir, 'secret.txt')}`, true, 'foo', 'bar', null],
|
||||||
[`notfound=secret`, true, '', '', new Error('secret file secret not found')]
|
[`notfound=secret`, true, '', '', new Error('secret file secret not found')]
|
||||||
])('given %p key and %p secret', async (kvp: string, file: boolean, exKey: string, exValue: string, error: Error | null) => {
|
])('given %o key and %o secret', async (kvp: string, file: boolean, exKey: string, exValue: string, error: Error | null) => {
|
||||||
try {
|
try {
|
||||||
let secret: string;
|
let secret: string;
|
||||||
if (file) {
|
if (file) {
|
||||||
@@ -191,7 +191,7 @@ describe('resolveSecret', () => {
|
|||||||
expect(secret).toEqual(`id=${exKey},src=${tmpName}`);
|
expect(secret).toEqual(`id=${exKey},src=${tmpName}`);
|
||||||
expect(fs.readFileSync(tmpName, 'utf-8')).toEqual(exValue);
|
expect(fs.readFileSync(tmpName, 'utf-8')).toEqual(exValue);
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
// eslint-disable-next-line jest/no-conditional-expect
|
// eslint-disable-next-line vitest/no-conditional-expect
|
||||||
expect(e.message).toEqual(error?.message);
|
expect(e.message).toEqual(error?.message);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@@ -201,12 +201,12 @@ describe('resolveSecret', () => {
|
|||||||
['FOO=', 'FOO', '', new Error('FOO= is not a valid secret')],
|
['FOO=', 'FOO', '', new Error('FOO= is not a valid secret')],
|
||||||
['=bar', '', '', new Error('=bar is not a valid secret')],
|
['=bar', '', '', new Error('=bar is not a valid secret')],
|
||||||
['FOO=bar=baz', 'FOO', 'bar=baz', null]
|
['FOO=bar=baz', 'FOO', 'bar=baz', null]
|
||||||
])('given %p key and %p env', async (kvp: string, exKey: string, exValue: string, error: Error | null) => {
|
])('given %o key and %o env', async (kvp: string, exKey: string, exValue: string, error: Error | null) => {
|
||||||
try {
|
try {
|
||||||
const secret = Build.resolveSecretEnv(kvp);
|
const secret = Build.resolveSecretEnv(kvp);
|
||||||
expect(secret).toEqual(`id=${exKey},env=${exValue}`);
|
expect(secret).toEqual(`id=${exKey},env=${exValue}`);
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
// eslint-disable-next-line jest/no-conditional-expect
|
// eslint-disable-next-line vitest/no-conditional-expect
|
||||||
expect(e.message).toEqual(error?.message);
|
expect(e.message).toEqual(error?.message);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@@ -255,7 +255,7 @@ describe('resolveCacheToAttrs', () => {
|
|||||||
'abcd1234',
|
'abcd1234',
|
||||||
'type=gha,repository=foo/bar,mode=max,ghtoken=abcd1234',
|
'type=gha,repository=foo/bar,mode=max,ghtoken=abcd1234',
|
||||||
],
|
],
|
||||||
])('given %p', async (input: string, githubToken: string | undefined, expected: string) => {
|
])('given %o', async (input: string, githubToken: string | undefined, expected: string) => {
|
||||||
expect(Build.resolveCacheToAttrs(input, githubToken)).toEqual(expected);
|
expect(Build.resolveCacheToAttrs(input, githubToken)).toEqual(expected);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
@@ -271,7 +271,7 @@ describe('hasLocalExporter', () => {
|
|||||||
[['"type=tar","dest=/tmp/image.tar"'], false],
|
[['"type=tar","dest=/tmp/image.tar"'], false],
|
||||||
[['" type= local" , dest=./release-out'], true],
|
[['" type= local" , dest=./release-out'], true],
|
||||||
[['.'], true]
|
[['.'], true]
|
||||||
])('given %p returns %p', async (exporters: Array<string>, expected: boolean) => {
|
])('given %o returns %o', async (exporters: Array<string>, expected: boolean) => {
|
||||||
expect(Build.hasLocalExporter(exporters)).toEqual(expected);
|
expect(Build.hasLocalExporter(exporters)).toEqual(expected);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
@@ -287,7 +287,7 @@ describe('hasTarExporter', () => {
|
|||||||
[['"type=tar","dest=/tmp/image.tar"'], true],
|
[['"type=tar","dest=/tmp/image.tar"'], true],
|
||||||
[['" type= local" , dest=./release-out'], false],
|
[['" type= local" , dest=./release-out'], false],
|
||||||
[['.'], false]
|
[['.'], false]
|
||||||
])('given %p returns %p', async (exporters: Array<string>, expected: boolean) => {
|
])('given %o returns %o', async (exporters: Array<string>, expected: boolean) => {
|
||||||
expect(Build.hasTarExporter(exporters)).toEqual(expected);
|
expect(Build.hasTarExporter(exporters)).toEqual(expected);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
@@ -305,7 +305,7 @@ describe('hasDockerExporter', () => {
|
|||||||
[['type=docker'], true, false],
|
[['type=docker'], true, false],
|
||||||
[['type=docker'], true, true],
|
[['type=docker'], true, true],
|
||||||
[['.'], true, true],
|
[['.'], true, true],
|
||||||
])('given %p returns %p', async (exporters: Array<string>, expected: boolean, load: boolean | undefined) => {
|
])('given %o returns %o', async (exporters: Array<string>, expected: boolean, load: boolean | undefined) => {
|
||||||
expect(Build.hasDockerExporter(exporters, load)).toEqual(expected);
|
expect(Build.hasDockerExporter(exporters, load)).toEqual(expected);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
@@ -316,7 +316,7 @@ describe('hasAttestationType', () => {
|
|||||||
['type=provenance,mode=min', 'provenance', true],
|
['type=provenance,mode=min', 'provenance', true],
|
||||||
['type=sbom,true', 'sbom', true],
|
['type=sbom,true', 'sbom', true],
|
||||||
['type=foo,bar', 'provenance', false],
|
['type=foo,bar', 'provenance', false],
|
||||||
])('given %p for %p returns %p', async (attrs: string, name: string, expected: boolean) => {
|
])('given %o for %o returns %o', async (attrs: string, name: string, expected: boolean) => {
|
||||||
expect(Build.hasAttestationType(name, attrs)).toEqual(expected);
|
expect(Build.hasAttestationType(name, attrs)).toEqual(expected);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
@@ -340,7 +340,7 @@ describe('resolveAttestationAttrs', () => {
|
|||||||
'',
|
'',
|
||||||
''
|
''
|
||||||
],
|
],
|
||||||
])('given %p', async (input: string, expected: string) => {
|
])('given %o', async (input: string, expected: string) => {
|
||||||
expect(Build.resolveAttestationAttrs(input)).toEqual(expected);
|
expect(Build.resolveAttestationAttrs(input)).toEqual(expected);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
@@ -348,10 +348,11 @@ describe('resolveAttestationAttrs', () => {
|
|||||||
describe('hasGitAuthTokenSecret', () => {
|
describe('hasGitAuthTokenSecret', () => {
|
||||||
// prettier-ignore
|
// prettier-ignore
|
||||||
test.each([
|
test.each([
|
||||||
[['A_SECRET=abcdef0123456789'], false],
|
[['A_SECRET=abcdef0123456789'], undefined, false],
|
||||||
[['GIT_AUTH_TOKEN=abcdefghijklmno=0123456789'], true],
|
[['GIT_AUTH_TOKEN=abcdefghijklmno=0123456789'], undefined, true],
|
||||||
])('given %p secret', async (kvp: Array<string>, expected: boolean) => {
|
[['GIT_AUTH_TOKEN.github.com=abcdefghijklmno=0123456789'], 'github.com', true],
|
||||||
expect(Build.hasGitAuthTokenSecret(kvp)).toBe(expected);
|
])('given %o secret', async (kvp: Array<string>, domain: string | undefined, expected: boolean) => {
|
||||||
|
expect(Build.hasGitAuthTokenSecret(kvp, domain)).toBe(expected);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@@ -14,18 +14,18 @@
|
|||||||
* limitations under the License.
|
* 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 fs from 'fs';
|
||||||
import * as path from 'path';
|
import * as path from 'path';
|
||||||
|
|
||||||
import {Builder} from '../../src/buildx/builder';
|
import {Builder} from '../../src/buildx/builder.js';
|
||||||
import {Exec} from '../../src/exec';
|
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');
|
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 {
|
return {
|
||||||
name: 'builder2',
|
name: 'builder2',
|
||||||
driver: 'docker-container',
|
driver: 'docker-container',
|
||||||
@@ -46,7 +46,7 @@ jest.spyOn(Builder.prototype, 'inspect').mockImplementation(async (): Promise<Bu
|
|||||||
|
|
||||||
describe('exists', () => {
|
describe('exists', () => {
|
||||||
it('valid', async () => {
|
it('valid', async () => {
|
||||||
const execSpy = jest.spyOn(Exec, 'getExecOutput');
|
const execSpy = vi.spyOn(Exec, 'getExecOutput');
|
||||||
const builder = new Builder();
|
const builder = new Builder();
|
||||||
await builder.exists('foo');
|
await builder.exists('foo');
|
||||||
expect(execSpy).toHaveBeenCalledWith(`docker`, ['buildx', 'inspect', 'foo'], {
|
expect(execSpy).toHaveBeenCalledWith(`docker`, ['buildx', 'inspect', 'foo'], {
|
||||||
@@ -548,7 +548,7 @@ baz = qux
|
|||||||
]
|
]
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
])('given %p', async (inspectFile, expected) => {
|
])('given %o', async (inspectFile, expected) => {
|
||||||
expect(await Builder.parseInspect(fs.readFileSync(path.join(fixturesDir, inspectFile)).toString())).toEqual(expected);
|
expect(await Builder.parseInspect(fs.readFileSync(path.join(fixturesDir, inspectFile)).toString())).toEqual(expected);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -14,16 +14,16 @@
|
|||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import {describe, expect, it} from '@jest/globals';
|
import {describe, expect, it} from 'vitest';
|
||||||
import fs from 'fs';
|
import fs from 'fs';
|
||||||
import os from 'os';
|
import os from 'os';
|
||||||
import path from 'path';
|
import path from 'path';
|
||||||
import * as core from '@actions/core';
|
import * as core from '@actions/core';
|
||||||
|
|
||||||
import {Buildx} from '../../src/buildx/buildx';
|
import {Buildx} from '../../src/buildx/buildx.js';
|
||||||
import {Build} from '../../src/buildx/build';
|
import {Build} from '../../src/buildx/build.js';
|
||||||
import {Bake} from '../../src/buildx/bake';
|
import {Bake} from '../../src/buildx/bake.js';
|
||||||
import {Exec} from '../../src/exec';
|
import {Exec} from '../../src/exec.js';
|
||||||
|
|
||||||
const fixturesDir = path.join(__dirname, '..', '.fixtures');
|
const fixturesDir = path.join(__dirname, '..', '.fixtures');
|
||||||
const tmpDir = fs.mkdtempSync(path.join(process.env.TEMP || os.tmpdir(), 'buildx-buildx-itg-'));
|
const tmpDir = fs.mkdtempSync(path.join(process.env.TEMP || os.tmpdir(), 'buildx-buildx-itg-'));
|
||||||
|
|||||||
@@ -14,29 +14,29 @@
|
|||||||
* limitations under the License.
|
* 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 fs from 'fs';
|
||||||
import os from 'os';
|
import os from 'os';
|
||||||
import path from 'path';
|
import path from 'path';
|
||||||
import * as rimraf from 'rimraf';
|
import * as rimraf from 'rimraf';
|
||||||
import * as semver from 'semver';
|
import * as semver from 'semver';
|
||||||
|
|
||||||
import {Buildx} from '../../src/buildx/buildx';
|
import {Buildx} from '../../src/buildx/buildx.js';
|
||||||
import {Context} from '../../src/context';
|
import {Context} from '../../src/context.js';
|
||||||
import {Exec} from '../../src/exec';
|
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 fixturesDir = path.join(__dirname, '..', '.fixtures');
|
||||||
const tmpDir = fs.mkdtempSync(path.join(process.env.TEMP || os.tmpdir(), 'buildx-buildx-'));
|
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});
|
fs.mkdirSync(tmpDir, {recursive: true});
|
||||||
return tmpDir;
|
return tmpDir;
|
||||||
});
|
});
|
||||||
|
|
||||||
jest.spyOn(Context, 'tmpName').mockImplementation((): string => {
|
vi.spyOn(Context, 'tmpName').mockImplementation((): string => {
|
||||||
return tmpName;
|
return tmpName;
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -47,7 +47,7 @@ afterEach(() => {
|
|||||||
describe('configDir', () => {
|
describe('configDir', () => {
|
||||||
const originalEnv = process.env;
|
const originalEnv = process.env;
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
jest.resetModules();
|
vi.resetModules();
|
||||||
process.env = {
|
process.env = {
|
||||||
...originalEnv,
|
...originalEnv,
|
||||||
BUILDX_CONFIG: '/var/docker/buildx',
|
BUILDX_CONFIG: '/var/docker/buildx',
|
||||||
@@ -69,7 +69,7 @@ describe('configDir', () => {
|
|||||||
describe('certsDir', () => {
|
describe('certsDir', () => {
|
||||||
const originalEnv = process.env;
|
const originalEnv = process.env;
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
jest.resetModules();
|
vi.resetModules();
|
||||||
process.env = {
|
process.env = {
|
||||||
...originalEnv,
|
...originalEnv,
|
||||||
BUILDX_CONFIG: '/var/docker/buildx'
|
BUILDX_CONFIG: '/var/docker/buildx'
|
||||||
@@ -86,7 +86,7 @@ describe('certsDir', () => {
|
|||||||
|
|
||||||
describe('isAvailable', () => {
|
describe('isAvailable', () => {
|
||||||
it('docker cli', async () => {
|
it('docker cli', async () => {
|
||||||
const execSpy = jest.spyOn(Exec, 'getExecOutput');
|
const execSpy = vi.spyOn(Exec, 'getExecOutput');
|
||||||
const buildx = new Buildx({
|
const buildx = new Buildx({
|
||||||
standalone: false
|
standalone: false
|
||||||
});
|
});
|
||||||
@@ -97,7 +97,7 @@ describe('isAvailable', () => {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
it('standalone', async () => {
|
it('standalone', async () => {
|
||||||
const execSpy = jest.spyOn(Exec, 'getExecOutput');
|
const execSpy = vi.spyOn(Exec, 'getExecOutput');
|
||||||
const buildx = new Buildx({
|
const buildx = new Buildx({
|
||||||
standalone: true
|
standalone: true
|
||||||
});
|
});
|
||||||
@@ -111,7 +111,7 @@ describe('isAvailable', () => {
|
|||||||
|
|
||||||
describe('printVersion', () => {
|
describe('printVersion', () => {
|
||||||
it('docker cli', async () => {
|
it('docker cli', async () => {
|
||||||
const execSpy = jest.spyOn(Exec, 'exec');
|
const execSpy = vi.spyOn(Exec, 'exec');
|
||||||
const buildx = new Buildx({
|
const buildx = new Buildx({
|
||||||
standalone: false
|
standalone: false
|
||||||
});
|
});
|
||||||
@@ -121,7 +121,7 @@ describe('printVersion', () => {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
it('standalone', async () => {
|
it('standalone', async () => {
|
||||||
const execSpy = jest.spyOn(Exec, 'exec');
|
const execSpy = vi.spyOn(Exec, 'exec');
|
||||||
const buildx = new Buildx({
|
const buildx = new Buildx({
|
||||||
standalone: true
|
standalone: true
|
||||||
});
|
});
|
||||||
@@ -145,7 +145,7 @@ describe('parseVersion', () => {
|
|||||||
['github.com/docker/buildx v0.4.1 bda4882a65349ca359216b135896bddc1d92461c', '0.4.1'],
|
['github.com/docker/buildx v0.4.1 bda4882a65349ca359216b135896bddc1d92461c', '0.4.1'],
|
||||||
['github.com/docker/buildx v0.4.2 fb7b670b764764dc4716df3eba07ffdae4cc47b2', '0.4.2'],
|
['github.com/docker/buildx v0.4.2 fb7b670b764764dc4716df3eba07ffdae4cc47b2', '0.4.2'],
|
||||||
['github.com/docker/buildx f117971 f11797113e5a9b86bd976329c5dbb8a8bfdfadfa', 'f117971']
|
['github.com/docker/buildx f117971 f11797113e5a9b86bd976329c5dbb8a8bfdfadfa', 'f117971']
|
||||||
])('given %p', async (stdout, expected) => {
|
])('given %o', async (stdout, expected) => {
|
||||||
expect(Buildx.parseVersion(stdout)).toEqual(expected);
|
expect(Buildx.parseVersion(stdout)).toEqual(expected);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
@@ -155,7 +155,7 @@ describe('versionSatisfies', () => {
|
|||||||
['0.4.1', '>=0.3.2', true],
|
['0.4.1', '>=0.3.2', true],
|
||||||
['bda4882a65349ca359216b135896bddc1d92461c', '>0.1.0', false],
|
['bda4882a65349ca359216b135896bddc1d92461c', '>0.1.0', false],
|
||||||
['f117971', '>0.6.0', true]
|
['f117971', '>0.6.0', true]
|
||||||
])('given %p', async (version, range, expected) => {
|
])('given %o', async (version, range, expected) => {
|
||||||
const buildx = new Buildx();
|
const buildx = new Buildx();
|
||||||
expect(await buildx.versionSatisfies(range, version)).toBe(expected);
|
expect(await buildx.versionSatisfies(range, version)).toBe(expected);
|
||||||
});
|
});
|
||||||
@@ -164,7 +164,7 @@ describe('versionSatisfies', () => {
|
|||||||
describe('resolveCertsDriverOpts', () => {
|
describe('resolveCertsDriverOpts', () => {
|
||||||
const originalEnv = process.env;
|
const originalEnv = process.env;
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
jest.resetModules();
|
vi.resetModules();
|
||||||
process.env = {
|
process.env = {
|
||||||
...originalEnv,
|
...originalEnv,
|
||||||
BUILDX_CONFIG: path.join(tmpDir, 'resolveCertsDriverOpts', 'buildx')
|
BUILDX_CONFIG: path.join(tmpDir, 'resolveCertsDriverOpts', 'buildx')
|
||||||
@@ -236,7 +236,7 @@ describe('resolveCertsDriverOpts', () => {
|
|||||||
],
|
],
|
||||||
[]
|
[]
|
||||||
],
|
],
|
||||||
])('%p. given %p endpoint, %p driver', async (id: number, endpoint: string, driver: string, cert: Cert, expectedFiles: Array<string>, expectedOpts: Array<string>) => {
|
])('%o. given %o endpoint, %o driver', async (id: number, endpoint: string, driver: string, cert: Cert, expectedFiles: Array<string>, expectedOpts: Array<string>) => {
|
||||||
fs.mkdirSync(Buildx.certsDir, {recursive: true});
|
fs.mkdirSync(Buildx.certsDir, {recursive: true});
|
||||||
expect(Buildx.resolveCertsDriverOpts(driver, endpoint, cert)).toEqual(expectedOpts);
|
expect(Buildx.resolveCertsDriverOpts(driver, endpoint, cert)).toEqual(expectedOpts);
|
||||||
for (const k in expectedFiles) {
|
for (const k in expectedFiles) {
|
||||||
@@ -298,7 +298,7 @@ describe('localState', () => {
|
|||||||
DockerfilePath: '-'
|
DockerfilePath: '-'
|
||||||
} as LocalState,
|
} as LocalState,
|
||||||
]
|
]
|
||||||
])('given %p', async (ref: string, expected: LocalState) => {
|
])('given %o', async (ref: string, expected: LocalState) => {
|
||||||
const localState = Buildx.localState(ref, path.join(fixturesDir, 'buildx-refs'));
|
const localState = Buildx.localState(ref, path.join(fixturesDir, 'buildx-refs'));
|
||||||
expect(localState).toEqual(expected);
|
expect(localState).toEqual(expected);
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -14,16 +14,16 @@
|
|||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import {describe, expect, it, test} from '@jest/globals';
|
import {describe, expect, it, test} from 'vitest';
|
||||||
import fs from 'fs';
|
import fs from 'fs';
|
||||||
import os from 'os';
|
import os from 'os';
|
||||||
import path from 'path';
|
import path from 'path';
|
||||||
|
|
||||||
import {Buildx} from '../../src/buildx/buildx';
|
import {Buildx} from '../../src/buildx/buildx.js';
|
||||||
import {Bake} from '../../src/buildx/bake';
|
import {Bake} from '../../src/buildx/bake.js';
|
||||||
import {Build} from '../../src/buildx/build';
|
import {Build} from '../../src/buildx/build.js';
|
||||||
import {History} from '../../src/buildx/history';
|
import {History} from '../../src/buildx/history.js';
|
||||||
import {Exec} from '../../src/exec';
|
import {Exec} from '../../src/exec.js';
|
||||||
|
|
||||||
const fixturesDir = path.join(__dirname, '..', '.fixtures');
|
const fixturesDir = path.join(__dirname, '..', '.fixtures');
|
||||||
const tmpDir = fs.mkdtempSync(path.join(process.env.TEMP || os.tmpdir(), 'buildx-history-itg-'));
|
const tmpDir = fs.mkdtempSync(path.join(process.env.TEMP || os.tmpdir(), 'buildx-history-itg-'));
|
||||||
@@ -187,40 +187,4 @@ maybe('export', () => {
|
|||||||
expect(fs.existsSync(exportRes?.dockerbuildFilename)).toBe(true);
|
expect(fs.existsSync(exportRes?.dockerbuildFilename)).toBe(true);
|
||||||
expect(exportRes?.summaries).toBeDefined();
|
expect(exportRes?.summaries).toBeDefined();
|
||||||
});
|
});
|
||||||
|
|
||||||
it('export using container', async () => {
|
|
||||||
const buildx = new Buildx();
|
|
||||||
const build = new Build({buildx: buildx});
|
|
||||||
|
|
||||||
fs.mkdirSync(tmpDir, {recursive: true});
|
|
||||||
await expect(
|
|
||||||
(async () => {
|
|
||||||
// prettier-ignore
|
|
||||||
const buildCmd = await buildx.getCommand([
|
|
||||||
'--builder', process.env.CTN_BUILDER_NAME ?? 'default',
|
|
||||||
'build', '-f', path.join(fixturesDir, 'hello.Dockerfile'),
|
|
||||||
'--metadata-file', build.getMetadataFilePath(),
|
|
||||||
fixturesDir
|
|
||||||
]);
|
|
||||||
await Exec.exec(buildCmd.command, buildCmd.args);
|
|
||||||
})()
|
|
||||||
).resolves.not.toThrow();
|
|
||||||
|
|
||||||
const metadata = build.resolveMetadata();
|
|
||||||
expect(metadata).toBeDefined();
|
|
||||||
const buildRef = build.resolveRef(metadata);
|
|
||||||
expect(buildRef).toBeDefined();
|
|
||||||
|
|
||||||
const history = new History({buildx: buildx});
|
|
||||||
const exportRes = await history.export({
|
|
||||||
refs: [buildRef ?? ''],
|
|
||||||
useContainer: true
|
|
||||||
});
|
|
||||||
|
|
||||||
expect(exportRes).toBeDefined();
|
|
||||||
expect(exportRes?.dockerbuildFilename).toBeDefined();
|
|
||||||
expect(exportRes?.dockerbuildSize).toBeDefined();
|
|
||||||
expect(fs.existsSync(exportRes?.dockerbuildFilename)).toBe(true);
|
|
||||||
expect(exportRes?.summaries).toBeDefined();
|
|
||||||
});
|
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -14,15 +14,15 @@
|
|||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import {describe, expect, it} from '@jest/globals';
|
import {describe, expect, it} from 'vitest';
|
||||||
import * as fs from 'fs';
|
import * as fs from 'fs';
|
||||||
import * as path from 'path';
|
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 {Manifest as ImageToolsManifest} from '../../src/types/buildx/imagetools.js';
|
||||||
import {Image} from '../../src/types/oci/config';
|
import {Image} from '../../src/types/oci/config.js';
|
||||||
import {Descriptor} from '../../src/types/oci/descriptor';
|
import {Descriptor} from '../../src/types/oci/descriptor.js';
|
||||||
|
|
||||||
const fixturesDir = path.join(__dirname, '..', '.fixtures');
|
const fixturesDir = path.join(__dirname, '..', '.fixtures');
|
||||||
|
|
||||||
|
|||||||
@@ -14,10 +14,10 @@
|
|||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import {describe, expect, test} from '@jest/globals';
|
import {describe, expect, test} from 'vitest';
|
||||||
import * as fs from 'fs';
|
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;
|
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({
|
const install = new Install({
|
||||||
standalone: true
|
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)) {
|
if (!fs.existsSync(toolPath)) {
|
||||||
throw new Error('toolPath does not exist');
|
throw new Error('toolPath does not exist');
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -14,14 +14,15 @@
|
|||||||
* limitations under the License.
|
* 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 fs from 'fs';
|
||||||
import os from 'os';
|
import os from 'os';
|
||||||
import path from 'path';
|
import path from 'path';
|
||||||
import * as rimraf from 'rimraf';
|
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-'));
|
const tmpDir = fs.mkdtempSync(path.join(process.env.TEMP || os.tmpdir(), 'buildx-install-'));
|
||||||
|
|
||||||
@@ -36,9 +37,9 @@ describe('download', () => {
|
|||||||
['v0.10.5', true],
|
['v0.10.5', true],
|
||||||
['latest', true]
|
['latest', true]
|
||||||
])(
|
])(
|
||||||
'acquires %p of buildx (standalone: %p)', async (version, standalone) => {
|
'acquires %o of buildx (standalone: %o)', async (version, standalone) => {
|
||||||
const install = new Install({standalone: standalone});
|
const install = new Install({standalone: standalone});
|
||||||
const toolPath = await install.download(version);
|
const toolPath = await install.download({version});
|
||||||
expect(fs.existsSync(toolPath)).toBe(true);
|
expect(fs.existsSync(toolPath)).toBe(true);
|
||||||
let buildxBin: string;
|
let buildxBin: string;
|
||||||
if (standalone) {
|
if (standalone) {
|
||||||
@@ -55,9 +56,9 @@ describe('download', () => {
|
|||||||
['v0.9.0'],
|
['v0.9.0'],
|
||||||
['v0.10.5'],
|
['v0.10.5'],
|
||||||
])(
|
])(
|
||||||
'acquires %p of buildx with cache', async (version) => {
|
'acquires %o of buildx with cache', async (version) => {
|
||||||
const install = new Install({standalone: false});
|
const install = new Install({standalone: false});
|
||||||
const toolPath = await install.download(version);
|
const toolPath = await install.download({version});
|
||||||
expect(fs.existsSync(toolPath)).toBe(true);
|
expect(fs.existsSync(toolPath)).toBe(true);
|
||||||
}, 100000);
|
}, 100000);
|
||||||
|
|
||||||
@@ -66,9 +67,9 @@ describe('download', () => {
|
|||||||
['v0.11.2'],
|
['v0.11.2'],
|
||||||
['v0.12.0'],
|
['v0.12.0'],
|
||||||
])(
|
])(
|
||||||
'acquires %p of buildx without cache', async (version) => {
|
'acquires %o of buildx without cache', async (version) => {
|
||||||
const install = new Install({standalone: false});
|
const 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);
|
expect(fs.existsSync(toolPath)).toBe(true);
|
||||||
}, 100000);
|
}, 100000);
|
||||||
|
|
||||||
@@ -85,10 +86,10 @@ describe('download', () => {
|
|||||||
['linux', 's390x'],
|
['linux', 's390x'],
|
||||||
])(
|
])(
|
||||||
'acquires buildx for %s/%s', async (os, arch) => {
|
'acquires buildx for %s/%s', async (os, arch) => {
|
||||||
jest.spyOn(osm, 'platform').mockImplementation(() => os as NodeJS.Platform);
|
mockPlatform(os as NodeJS.Platform);
|
||||||
jest.spyOn(osm, 'arch').mockImplementation(() => arch);
|
mockArch(arch);
|
||||||
const install = new Install();
|
const install = new Install();
|
||||||
const buildxBin = await install.download('latest');
|
const buildxBin = await install.download({version: 'latest'});
|
||||||
expect(fs.existsSync(buildxBin)).toBe(true);
|
expect(fs.existsSync(buildxBin)).toBe(true);
|
||||||
}, 100000);
|
}, 100000);
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -14,13 +14,13 @@
|
|||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import {describe, expect, it} from '@jest/globals';
|
import {describe, expect, it} from 'vitest';
|
||||||
import fs from 'fs';
|
import fs from 'fs';
|
||||||
import os from 'os';
|
import os from 'os';
|
||||||
import path from 'path';
|
import path from 'path';
|
||||||
|
|
||||||
import {Cache} from '../src/cache';
|
import {Cache} from '../src/cache.js';
|
||||||
import {Util} from '../src/util';
|
import {Util} from '../src/util.js';
|
||||||
|
|
||||||
const fixturesDir = path.join(__dirname, '.fixtures');
|
const fixturesDir = path.join(__dirname, '.fixtures');
|
||||||
const tmpDir = fs.mkdtempSync(path.join(process.env.TEMP || os.tmpdir(), 'cache-itg-'));
|
const tmpDir = fs.mkdtempSync(path.join(process.env.TEMP || os.tmpdir(), 'cache-itg-'));
|
||||||
|
|||||||
@@ -14,27 +14,27 @@
|
|||||||
* limitations under the License.
|
* 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 fs from 'fs';
|
||||||
import os from 'os';
|
import os from 'os';
|
||||||
import path from 'path';
|
import path from 'path';
|
||||||
import * as rimraf from 'rimraf';
|
import * as rimraf from 'rimraf';
|
||||||
import * as semver from 'semver';
|
import * as semver from 'semver';
|
||||||
|
|
||||||
import {Context} from '../../src/context';
|
import {Context} from '../../src/context.js';
|
||||||
import {Exec} from '../../src/exec';
|
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 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});
|
fs.mkdirSync(tmpDir, {recursive: true});
|
||||||
return tmpDir;
|
return tmpDir;
|
||||||
});
|
});
|
||||||
|
|
||||||
jest.spyOn(Context, 'tmpName').mockImplementation((): string => {
|
vi.spyOn(Context, 'tmpName').mockImplementation((): string => {
|
||||||
return tmpName;
|
return tmpName;
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -44,7 +44,7 @@ afterEach(() => {
|
|||||||
|
|
||||||
describe('isAvailable', () => {
|
describe('isAvailable', () => {
|
||||||
it('docker cli', async () => {
|
it('docker cli', async () => {
|
||||||
const execSpy = jest.spyOn(Exec, 'getExecOutput');
|
const execSpy = vi.spyOn(Exec, 'getExecOutput');
|
||||||
const compose = new Compose({
|
const compose = new Compose({
|
||||||
standalone: false
|
standalone: false
|
||||||
});
|
});
|
||||||
@@ -55,7 +55,7 @@ describe('isAvailable', () => {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
it('standalone', async () => {
|
it('standalone', async () => {
|
||||||
const execSpy = jest.spyOn(Exec, 'getExecOutput');
|
const execSpy = vi.spyOn(Exec, 'getExecOutput');
|
||||||
const compose = new Compose({
|
const compose = new Compose({
|
||||||
standalone: true
|
standalone: true
|
||||||
});
|
});
|
||||||
@@ -69,7 +69,7 @@ describe('isAvailable', () => {
|
|||||||
|
|
||||||
describe('printVersion', () => {
|
describe('printVersion', () => {
|
||||||
it('docker cli', async () => {
|
it('docker cli', async () => {
|
||||||
const execSpy = jest.spyOn(Exec, 'exec');
|
const execSpy = vi.spyOn(Exec, 'exec');
|
||||||
const compose = new Compose({
|
const compose = new Compose({
|
||||||
standalone: false
|
standalone: false
|
||||||
});
|
});
|
||||||
@@ -79,7 +79,7 @@ describe('printVersion', () => {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
it('standalone', async () => {
|
it('standalone', async () => {
|
||||||
const execSpy = jest.spyOn(Exec, 'exec');
|
const execSpy = vi.spyOn(Exec, 'exec');
|
||||||
const compose = new Compose({
|
const compose = new Compose({
|
||||||
standalone: true
|
standalone: true
|
||||||
});
|
});
|
||||||
@@ -101,7 +101,7 @@ describe('parseVersion', () => {
|
|||||||
// prettier-ignore
|
// prettier-ignore
|
||||||
test.each([
|
test.each([
|
||||||
['Docker Compose version v2.31.0', '2.31.0'],
|
['Docker Compose version v2.31.0', '2.31.0'],
|
||||||
])('given %p', async (stdout, expected) => {
|
])('given %o', async (stdout, expected) => {
|
||||||
expect(Compose.parseVersion(stdout)).toEqual(expected);
|
expect(Compose.parseVersion(stdout)).toEqual(expected);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -14,10 +14,10 @@
|
|||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import {describe, expect, test} from '@jest/globals';
|
import {describe, expect, test} from 'vitest';
|
||||||
import * as fs from 'fs';
|
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;
|
const maybe = !process.env.GITHUB_ACTIONS || (process.env.GITHUB_ACTIONS === 'true' && process.env.ImageOS && process.env.ImageOS.startsWith('ubuntu')) ? describe : describe.skip;
|
||||||
|
|
||||||
|
|||||||
@@ -14,14 +14,15 @@
|
|||||||
* limitations under the License.
|
* 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 fs from 'fs';
|
||||||
import os from 'os';
|
import os from 'os';
|
||||||
import path from 'path';
|
import path from 'path';
|
||||||
import * as rimraf from 'rimraf';
|
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-'));
|
const tmpDir = fs.mkdtempSync(path.join(process.env.TEMP || os.tmpdir(), 'compose-install-'));
|
||||||
|
|
||||||
@@ -36,7 +37,7 @@ describe('download', () => {
|
|||||||
['v2.32.4', true],
|
['v2.32.4', true],
|
||||||
['latest', true]
|
['latest', true]
|
||||||
])(
|
])(
|
||||||
'acquires %p of compose (standalone: %p)', async (version, standalone) => {
|
'acquires %o of compose (standalone: %o)', async (version, standalone) => {
|
||||||
const install = new Install({standalone: standalone});
|
const install = new Install({standalone: standalone});
|
||||||
const toolPath = await install.download(version);
|
const toolPath = await install.download(version);
|
||||||
expect(fs.existsSync(toolPath)).toBe(true);
|
expect(fs.existsSync(toolPath)).toBe(true);
|
||||||
@@ -55,7 +56,7 @@ describe('download', () => {
|
|||||||
['v2.31.0'],
|
['v2.31.0'],
|
||||||
['v2.32.4'],
|
['v2.32.4'],
|
||||||
])(
|
])(
|
||||||
'acquires %p of compose with cache', async (version) => {
|
'acquires %o of compose with cache', async (version) => {
|
||||||
const install = new Install({standalone: false});
|
const install = new Install({standalone: false});
|
||||||
const toolPath = await install.download(version);
|
const toolPath = await install.download(version);
|
||||||
expect(fs.existsSync(toolPath)).toBe(true);
|
expect(fs.existsSync(toolPath)).toBe(true);
|
||||||
@@ -66,7 +67,7 @@ describe('download', () => {
|
|||||||
['v2.27.1'],
|
['v2.27.1'],
|
||||||
['v2.28.0'],
|
['v2.28.0'],
|
||||||
])(
|
])(
|
||||||
'acquires %p of compose without cache', async (version) => {
|
'acquires %o of compose without cache', async (version) => {
|
||||||
const install = new Install({standalone: false});
|
const install = new Install({standalone: false});
|
||||||
const toolPath = await install.download(version, true);
|
const toolPath = await install.download(version, true);
|
||||||
expect(fs.existsSync(toolPath)).toBe(true);
|
expect(fs.existsSync(toolPath)).toBe(true);
|
||||||
@@ -85,8 +86,8 @@ describe('download', () => {
|
|||||||
['linux', 's390x'],
|
['linux', 's390x'],
|
||||||
])(
|
])(
|
||||||
'acquires compose for %s/%s', async (os, arch) => {
|
'acquires compose for %s/%s', async (os, arch) => {
|
||||||
jest.spyOn(osm, 'platform').mockImplementation(() => os as NodeJS.Platform);
|
mockPlatform(os as NodeJS.Platform);
|
||||||
jest.spyOn(osm, 'arch').mockImplementation(() => arch);
|
mockArch(arch);
|
||||||
const install = new Install();
|
const install = new Install();
|
||||||
const composeBin = await install.download('latest');
|
const composeBin = await install.download('latest');
|
||||||
expect(fs.existsSync(composeBin)).toBe(true);
|
expect(fs.existsSync(composeBin)).toBe(true);
|
||||||
|
|||||||
@@ -14,23 +14,23 @@
|
|||||||
* limitations under the License.
|
* 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 fs from 'fs';
|
||||||
import os from 'os';
|
import os from 'os';
|
||||||
import path from 'path';
|
import path from 'path';
|
||||||
import * as rimraf from 'rimraf';
|
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 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});
|
fs.mkdirSync(tmpDir, {recursive: true});
|
||||||
return tmpDir;
|
return tmpDir;
|
||||||
});
|
});
|
||||||
|
|
||||||
jest.spyOn(Context, 'tmpName').mockImplementation((): string => {
|
vi.spyOn(Context, 'tmpName').mockImplementation((): string => {
|
||||||
return tmpName;
|
return tmpName;
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -47,7 +47,7 @@ describe('gitRef', () => {
|
|||||||
describe('parseGitRef', () => {
|
describe('parseGitRef', () => {
|
||||||
const originalEnv = process.env;
|
const originalEnv = process.env;
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
jest.resetModules();
|
vi.resetModules();
|
||||||
process.env = {
|
process.env = {
|
||||||
...originalEnv,
|
...originalEnv,
|
||||||
DOCKER_GIT_CONTEXT_PR_HEAD_REF: ''
|
DOCKER_GIT_CONTEXT_PR_HEAD_REF: ''
|
||||||
@@ -66,7 +66,7 @@ describe('parseGitRef', () => {
|
|||||||
['refs/tags/v1.0.0', '', false, 'refs/tags/v1.0.0'],
|
['refs/tags/v1.0.0', '', false, 'refs/tags/v1.0.0'],
|
||||||
['refs/pull/15/merge', '', false, 'refs/pull/15/merge'],
|
['refs/pull/15/merge', '', false, 'refs/pull/15/merge'],
|
||||||
['refs/pull/15/merge', '', true, 'refs/pull/15/head'],
|
['refs/pull/15/merge', '', true, 'refs/pull/15/head'],
|
||||||
])('given %p and %p, should return %p', async (ref: string, sha: string, prHeadRef: boolean, expected: string) => {
|
])('given %o and %o, should return %o', async (ref: string, sha: string, prHeadRef: boolean, expected: string) => {
|
||||||
process.env.DOCKER_DEFAULT_GIT_CONTEXT_PR_HEAD_REF = prHeadRef ? 'true' : '';
|
process.env.DOCKER_DEFAULT_GIT_CONTEXT_PR_HEAD_REF = prHeadRef ? 'true' : '';
|
||||||
expect(Context.parseGitRef(ref, sha)).toEqual(expected);
|
expect(Context.parseGitRef(ref, sha)).toEqual(expected);
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -14,19 +14,19 @@
|
|||||||
* limitations under the License.
|
* 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 fs from 'fs';
|
||||||
import path from 'path';
|
import path from 'path';
|
||||||
import * as semver from 'semver';
|
import * as semver from 'semver';
|
||||||
|
|
||||||
import {Exec} from '../../src/exec';
|
import {Exec} from '../../src/exec.js';
|
||||||
import {Cosign} from '../../src/cosign/cosign';
|
import {Cosign} from '../../src/cosign/cosign.js';
|
||||||
|
|
||||||
const fixturesDir = path.join(__dirname, '..', '.fixtures');
|
const fixturesDir = path.join(__dirname, '..', '.fixtures');
|
||||||
|
|
||||||
describe('isAvailable', () => {
|
describe('isAvailable', () => {
|
||||||
it('checks Cosign is available', async () => {
|
it('checks Cosign is available', async () => {
|
||||||
const execSpy = jest.spyOn(Exec, 'getExecOutput');
|
const execSpy = vi.spyOn(Exec, 'getExecOutput');
|
||||||
const cosign = new Cosign();
|
const cosign = new Cosign();
|
||||||
await cosign.isAvailable();
|
await cosign.isAvailable();
|
||||||
expect(execSpy).toHaveBeenCalledWith(`cosign`, [], {
|
expect(execSpy).toHaveBeenCalledWith(`cosign`, [], {
|
||||||
@@ -38,7 +38,7 @@ describe('isAvailable', () => {
|
|||||||
|
|
||||||
describe('printVersion', () => {
|
describe('printVersion', () => {
|
||||||
it('prints Cosign version', async () => {
|
it('prints Cosign version', async () => {
|
||||||
const execSpy = jest.spyOn(Exec, 'exec');
|
const execSpy = vi.spyOn(Exec, 'exec');
|
||||||
const cosign = new Cosign();
|
const cosign = new Cosign();
|
||||||
await cosign.printVersion();
|
await cosign.printVersion();
|
||||||
expect(execSpy).toHaveBeenCalledWith(`cosign`, ['version', '--json'], {
|
expect(execSpy).toHaveBeenCalledWith(`cosign`, ['version', '--json'], {
|
||||||
@@ -59,7 +59,7 @@ describe('versionSatisfies', () => {
|
|||||||
['v0.4.1', '>=0.3.2', true],
|
['v0.4.1', '>=0.3.2', true],
|
||||||
['v0.8.0', '>0.6.0', true],
|
['v0.8.0', '>0.6.0', true],
|
||||||
['v0.8.0', '<0.3.0', false]
|
['v0.8.0', '<0.3.0', false]
|
||||||
])('given %p', async (version, range, expected) => {
|
])('given %o', async (version, range, expected) => {
|
||||||
const cosign = new Cosign();
|
const cosign = new Cosign();
|
||||||
expect(await cosign.versionSatisfies(range, version)).toBe(expected);
|
expect(await cosign.versionSatisfies(range, version)).toBe(expected);
|
||||||
});
|
});
|
||||||
@@ -71,7 +71,7 @@ describe('parseCommandOutput', () => {
|
|||||||
[path.join(fixturesDir, 'cosign', 'sign-output1.txt')],
|
[path.join(fixturesDir, 'cosign', 'sign-output1.txt')],
|
||||||
[path.join(fixturesDir, 'cosign', 'sign-output2.txt')],
|
[path.join(fixturesDir, 'cosign', 'sign-output2.txt')],
|
||||||
[path.join(fixturesDir, 'cosign', 'sign-output3.txt')],
|
[path.join(fixturesDir, 'cosign', 'sign-output3.txt')],
|
||||||
])('parsing %p', async (fixturePath: string) => {
|
])('parsing %o', async (fixturePath: string) => {
|
||||||
const signResult = Cosign.parseCommandOutput(fs.readFileSync(fixturePath, 'utf-8'));
|
const signResult = Cosign.parseCommandOutput(fs.readFileSync(fixturePath, 'utf-8'));
|
||||||
expect(signResult).toBeDefined();
|
expect(signResult).toBeDefined();
|
||||||
expect(signResult.bundle).toBeDefined();
|
expect(signResult.bundle).toBeDefined();
|
||||||
@@ -80,7 +80,7 @@ describe('parseCommandOutput', () => {
|
|||||||
// prettier-ignore
|
// prettier-ignore
|
||||||
test.each([
|
test.each([
|
||||||
[path.join(fixturesDir, 'cosign', 'verify-output-err1.txt')],
|
[path.join(fixturesDir, 'cosign', 'verify-output-err1.txt')],
|
||||||
])('parsing %p', async (fixturePath: string) => {
|
])('parsing %o', async (fixturePath: string) => {
|
||||||
const signResult = Cosign.parseCommandOutput(fs.readFileSync(fixturePath, 'utf-8'));
|
const signResult = Cosign.parseCommandOutput(fs.readFileSync(fixturePath, 'utf-8'));
|
||||||
expect(signResult).toBeDefined();
|
expect(signResult).toBeDefined();
|
||||||
expect(signResult.bundle).toBeUndefined();
|
expect(signResult.bundle).toBeUndefined();
|
||||||
|
|||||||
@@ -14,10 +14,10 @@
|
|||||||
* limitations under the License.
|
* 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 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;
|
const maybe = !process.env.GITHUB_ACTIONS || (process.env.GITHUB_ACTIONS === 'true' && process.env.ImageOS && process.env.ImageOS.startsWith('ubuntu')) ? describe : describe.skip;
|
||||||
|
|
||||||
|
|||||||
@@ -14,14 +14,15 @@
|
|||||||
* limitations under the License.
|
* 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 fs from 'fs';
|
||||||
import os from 'os';
|
import os from 'os';
|
||||||
import path from 'path';
|
import path from 'path';
|
||||||
import * as rimraf from 'rimraf';
|
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-'));
|
const tmpDir = fs.mkdtempSync(path.join(process.env.TEMP || os.tmpdir(), 'cosign-install-'));
|
||||||
|
|
||||||
@@ -36,7 +37,7 @@ describe('download', () => {
|
|||||||
['v3.0.1'],
|
['v3.0.1'],
|
||||||
['latest']
|
['latest']
|
||||||
])(
|
])(
|
||||||
'acquires %p of cosign', async (version) => {
|
'acquires %o of cosign', async (version) => {
|
||||||
const install = new Install();
|
const install = new Install();
|
||||||
const toolPath = await install.download({version});
|
const toolPath = await install.download({version});
|
||||||
expect(fs.existsSync(toolPath)).toBe(true);
|
expect(fs.existsSync(toolPath)).toBe(true);
|
||||||
@@ -50,7 +51,7 @@ describe('download', () => {
|
|||||||
['v2.6.1'],
|
['v2.6.1'],
|
||||||
['v3.0.1'],
|
['v3.0.1'],
|
||||||
])(
|
])(
|
||||||
'acquires %p of cosign with cache', async (version) => {
|
'acquires %o of cosign with cache', async (version) => {
|
||||||
const install = new Install();
|
const install = new Install();
|
||||||
const toolPath = await install.download({version});
|
const toolPath = await install.download({version});
|
||||||
expect(fs.existsSync(toolPath)).toBe(true);
|
expect(fs.existsSync(toolPath)).toBe(true);
|
||||||
@@ -61,7 +62,7 @@ describe('download', () => {
|
|||||||
['v2.5.3'],
|
['v2.5.3'],
|
||||||
['v2.6.0'],
|
['v2.6.0'],
|
||||||
])(
|
])(
|
||||||
'acquires %p of cosign without cache', async (version) => {
|
'acquires %o of cosign without cache', async (version) => {
|
||||||
const install = new Install();
|
const install = new Install();
|
||||||
const toolPath = await install.download({
|
const toolPath = await install.download({
|
||||||
version: version,
|
version: version,
|
||||||
@@ -80,8 +81,8 @@ describe('download', () => {
|
|||||||
['linux', 'arm64']
|
['linux', 'arm64']
|
||||||
])(
|
])(
|
||||||
'acquires undock for %s/%s', async (os, arch) => {
|
'acquires undock for %s/%s', async (os, arch) => {
|
||||||
jest.spyOn(osm, 'platform').mockImplementation(() => os as NodeJS.Platform);
|
mockPlatform(os as NodeJS.Platform);
|
||||||
jest.spyOn(osm, 'arch').mockImplementation(() => arch);
|
mockArch(arch);
|
||||||
const install = new Install();
|
const install = new Install();
|
||||||
const cosignBin = await install.download({
|
const cosignBin = await install.download({
|
||||||
version: 'latest'
|
version: 'latest'
|
||||||
|
|||||||
@@ -14,9 +14,9 @@
|
|||||||
* limitations under the License.
|
* 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;
|
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) {
|
if (err === undefined) {
|
||||||
throw new Error(`Expected no error, but got: ${e.message}`);
|
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);
|
expect(e.message).toContain(err);
|
||||||
}
|
}
|
||||||
}, 600000);
|
}, 600000);
|
||||||
|
|||||||
@@ -14,17 +14,26 @@
|
|||||||
* limitations under the License.
|
* 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 fs from 'fs';
|
||||||
import os from 'os';
|
import os from 'os';
|
||||||
import path from 'path';
|
import path from 'path';
|
||||||
import * as io from '@actions/io';
|
import * as io from '@actions/io';
|
||||||
import osm = require('os');
|
|
||||||
import * as rimraf from 'rimraf';
|
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 fixturesDir = path.join(__dirname, '..', '.fixtures');
|
||||||
const tmpDir = fs.mkdtempSync(path.join(process.env.TEMP || os.tmpdir(), 'docker-docker-'));
|
const tmpDir = fs.mkdtempSync(path.join(process.env.TEMP || os.tmpdir(), 'docker-docker-'));
|
||||||
@@ -36,7 +45,7 @@ afterEach(function () {
|
|||||||
describe('configDir', () => {
|
describe('configDir', () => {
|
||||||
const originalEnv = process.env;
|
const originalEnv = process.env;
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
jest.resetModules();
|
vi.resetModules();
|
||||||
process.env = {
|
process.env = {
|
||||||
...originalEnv,
|
...originalEnv,
|
||||||
DOCKER_CONFIG: '/var/docker/config'
|
DOCKER_CONFIG: '/var/docker/config'
|
||||||
@@ -47,7 +56,7 @@ describe('configDir', () => {
|
|||||||
});
|
});
|
||||||
it('returns default', async () => {
|
it('returns default', async () => {
|
||||||
process.env.DOCKER_CONFIG = '';
|
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'));
|
expect(Docker.configDir).toEqual(path.join('/tmp', 'home', '.docker'));
|
||||||
});
|
});
|
||||||
it('returns from env', async () => {
|
it('returns from env', async () => {
|
||||||
@@ -58,7 +67,7 @@ describe('configDir', () => {
|
|||||||
describe('configFile', () => {
|
describe('configFile', () => {
|
||||||
const originalEnv = process.env;
|
const originalEnv = process.env;
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
jest.resetModules();
|
vi.resetModules();
|
||||||
if (!fs.existsSync(tmpDir)) {
|
if (!fs.existsSync(tmpDir)) {
|
||||||
fs.mkdirSync(tmpDir, {recursive: true});
|
fs.mkdirSync(tmpDir, {recursive: true});
|
||||||
}
|
}
|
||||||
@@ -96,7 +105,7 @@ describe('configFile', () => {
|
|||||||
|
|
||||||
describe('isAvailable', () => {
|
describe('isAvailable', () => {
|
||||||
it('cli', async () => {
|
it('cli', async () => {
|
||||||
const ioWhichSpy = jest.spyOn(io, 'which');
|
const ioWhichSpy = vi.mocked(io.which).mockResolvedValue('/usr/bin/docker');
|
||||||
await Docker.isAvailable();
|
await Docker.isAvailable();
|
||||||
expect(ioWhichSpy).toHaveBeenCalledTimes(1);
|
expect(ioWhichSpy).toHaveBeenCalledTimes(1);
|
||||||
expect(ioWhichSpy).toHaveBeenCalledWith('docker', true);
|
expect(ioWhichSpy).toHaveBeenCalledWith('docker', true);
|
||||||
@@ -105,7 +114,7 @@ describe('isAvailable', () => {
|
|||||||
|
|
||||||
describe('exec', () => {
|
describe('exec', () => {
|
||||||
it('returns docker version', async () => {
|
it('returns docker version', async () => {
|
||||||
const execSpy = jest.spyOn(Docker, 'exec');
|
const execSpy = vi.spyOn(Docker, 'exec');
|
||||||
await Docker.exec(['version'], {
|
await Docker.exec(['version'], {
|
||||||
ignoreReturnCode: true,
|
ignoreReturnCode: true,
|
||||||
silent: true
|
silent: true
|
||||||
@@ -132,7 +141,7 @@ describe('exec', () => {
|
|||||||
|
|
||||||
describe('getExecOutput', () => {
|
describe('getExecOutput', () => {
|
||||||
it('returns docker version', async () => {
|
it('returns docker version', async () => {
|
||||||
const execSpy = jest.spyOn(Docker, 'getExecOutput');
|
const execSpy = vi.spyOn(Docker, 'getExecOutput');
|
||||||
await Docker.getExecOutput(['version'], {
|
await Docker.getExecOutput(['version'], {
|
||||||
ignoreReturnCode: true,
|
ignoreReturnCode: true,
|
||||||
silent: true
|
silent: true
|
||||||
@@ -159,7 +168,7 @@ describe('getExecOutput', () => {
|
|||||||
|
|
||||||
describe('context', () => {
|
describe('context', () => {
|
||||||
it('call docker context show', async () => {
|
it('call docker context show', async () => {
|
||||||
const execSpy = jest.spyOn(Docker, 'getExecOutput');
|
const execSpy = vi.spyOn(Docker, 'getExecOutput');
|
||||||
await Docker.context().catch(() => {
|
await Docker.context().catch(() => {
|
||||||
// noop
|
// noop
|
||||||
});
|
});
|
||||||
@@ -181,7 +190,7 @@ describe('context', () => {
|
|||||||
|
|
||||||
describe('contextInspect', () => {
|
describe('contextInspect', () => {
|
||||||
it('call docker context inspect', async () => {
|
it('call docker context inspect', async () => {
|
||||||
const execSpy = jest.spyOn(Docker, 'getExecOutput');
|
const execSpy = vi.spyOn(Docker, 'getExecOutput');
|
||||||
await Docker.contextInspect('foo').catch(() => {
|
await Docker.contextInspect('foo').catch(() => {
|
||||||
// noop
|
// noop
|
||||||
});
|
});
|
||||||
@@ -203,7 +212,7 @@ describe('contextInspect', () => {
|
|||||||
|
|
||||||
describe('printVersion', () => {
|
describe('printVersion', () => {
|
||||||
it('call docker version', async () => {
|
it('call docker version', async () => {
|
||||||
const execSpy = jest.spyOn(Docker, 'exec');
|
const execSpy = vi.spyOn(Docker, 'exec');
|
||||||
await Docker.printVersion().catch(() => {
|
await Docker.printVersion().catch(() => {
|
||||||
// noop
|
// noop
|
||||||
});
|
});
|
||||||
@@ -219,7 +228,7 @@ describe('printVersion', () => {
|
|||||||
|
|
||||||
describe('printInfo', () => {
|
describe('printInfo', () => {
|
||||||
it('call docker info', async () => {
|
it('call docker info', async () => {
|
||||||
const execSpy = jest.spyOn(Docker, 'exec');
|
const execSpy = vi.spyOn(Docker, 'exec');
|
||||||
await Docker.printInfo().catch(() => {
|
await Docker.printInfo().catch(() => {
|
||||||
// noop
|
// noop
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -14,16 +14,16 @@
|
|||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import {beforeAll, describe, test, expect} from '@jest/globals';
|
import {beforeAll, describe, test, expect} from 'vitest';
|
||||||
import fs from 'fs';
|
import fs from 'fs';
|
||||||
import os from 'os';
|
import os from 'os';
|
||||||
import path from 'path';
|
import path from 'path';
|
||||||
|
|
||||||
import {Install, InstallSource, InstallSourceArchive, InstallSourceImage} from '../../src/docker/install';
|
import {Install, InstallSource, InstallSourceArchive, InstallSourceImage} from '../../src/docker/install.js';
|
||||||
import {Docker} from '../../src/docker/docker';
|
import {Docker} from '../../src/docker/docker.js';
|
||||||
import {Install as RegclientInstall} from '../../src/regclient/install';
|
import {Install as RegclientInstall} from '../../src/regclient/install.js';
|
||||||
import {Install as UndockInstall} from '../../src/undock/install';
|
import {Install as UndockInstall} from '../../src/undock/install.js';
|
||||||
import {Exec} from '../../src/exec';
|
import {Exec} from '../../src/exec.js';
|
||||||
|
|
||||||
const tmpDir = () => fs.mkdtempSync(path.join(process.env.TEMP || os.tmpdir(), 'docker-install-itg-'));
|
const tmpDir = () => fs.mkdtempSync(path.join(process.env.TEMP || os.tmpdir(), 'docker-install-itg-'));
|
||||||
|
|
||||||
|
|||||||
@@ -14,14 +14,15 @@
|
|||||||
* limitations under the License.
|
* 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 fs from 'fs';
|
||||||
import os from 'os';
|
import os from 'os';
|
||||||
import path from 'path';
|
import path from 'path';
|
||||||
import * as rimraf from 'rimraf';
|
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-'));
|
const tmpDir = fs.mkdtempSync(path.join(process.env.TEMP || os.tmpdir(), 'docker-install-'));
|
||||||
|
|
||||||
@@ -59,9 +60,9 @@ describe('download', () => {
|
|||||||
[image('27.3.1'), 'linux'],
|
[image('27.3.1'), 'linux'],
|
||||||
[image('27.3.1'), 'win32'],
|
[image('27.3.1'), 'win32'],
|
||||||
])(
|
])(
|
||||||
'acquires %p of docker (%s)', async (source, platformOS) => {
|
'acquires %o of docker (%s)', async (source, platformOS) => {
|
||||||
jest.spyOn(osm, 'platform').mockImplementation(() => platformOS as NodeJS.Platform);
|
mockPlatform(platformOS as NodeJS.Platform);
|
||||||
jest.spyOn(osm, 'arch').mockImplementation(() => 'x64');
|
mockArch('x64');
|
||||||
const install = new Install({
|
const install = new Install({
|
||||||
source: source,
|
source: source,
|
||||||
runDir: tmpDir
|
runDir: tmpDir
|
||||||
@@ -102,7 +103,7 @@ describe('getRelease', () => {
|
|||||||
describe('limaImage', () => {
|
describe('limaImage', () => {
|
||||||
const originalEnv = process.env;
|
const originalEnv = process.env;
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
jest.resetModules();
|
vi.resetModules();
|
||||||
process.env = {
|
process.env = {
|
||||||
...originalEnv,
|
...originalEnv,
|
||||||
LIMA_IMAGES: `x86_64:https://cloud-images.ubuntu.com/releases/23.10/release-20231011/ubuntu-23.10-server-cloudimg-amd64.img@sha256:f6529be56da3429a56e4f5ef202bf4958201bc63f8541e478caa6e8eb712e635
|
LIMA_IMAGES: `x86_64:https://cloud-images.ubuntu.com/releases/23.10/release-20231011/ubuntu-23.10-server-cloudimg-amd64.img@sha256:f6529be56da3429a56e4f5ef202bf4958201bc63f8541e478caa6e8eb712e635
|
||||||
|
|||||||
@@ -14,24 +14,24 @@
|
|||||||
* limitations under the License.
|
* 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 fs from 'fs';
|
||||||
import * as path from 'path';
|
import * as path from 'path';
|
||||||
|
|
||||||
import {DockerHub} from '../src/dockerhub';
|
import {DockerHub} from '../src/dockerhub.js';
|
||||||
import {RepositoryResponse, RepositoryTagsResponse} from '../src/types/dockerhub';
|
import {RepositoryResponse, RepositoryTagsResponse} from '../src/types/dockerhub.js';
|
||||||
|
|
||||||
import repoInfoFixture from './.fixtures/dockerhub-repoinfo.json';
|
import repoInfoFixture from './.fixtures/dockerhub-repoinfo.json' with {type: 'json'};
|
||||||
import repoTagsFixture from './.fixtures/dockerhub-repotags.json';
|
import repoTagsFixture from './.fixtures/dockerhub-repotags.json' with {type: 'json'};
|
||||||
import repoAllTagsFixture from './.fixtures/dockerhub-repoalltags.json';
|
import repoAllTagsFixture from './.fixtures/dockerhub-repoalltags.json' with {type: 'json'};
|
||||||
|
|
||||||
describe('getRepository', () => {
|
describe('getRepository', () => {
|
||||||
it('returns repo info', async () => {
|
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);
|
return <Promise<RepositoryResponse>>(repoInfoFixture as unknown);
|
||||||
});
|
});
|
||||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
// 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({
|
const dockerhub = await DockerHub.build({
|
||||||
credentials: {
|
credentials: {
|
||||||
username: 'foo',
|
username: 'foo',
|
||||||
@@ -50,11 +50,11 @@ describe('getRepository', () => {
|
|||||||
|
|
||||||
describe('getRepositoryTags', () => {
|
describe('getRepositoryTags', () => {
|
||||||
it('return repo tags', async () => {
|
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);
|
return <Promise<RepositoryTagsResponse>>(repoTagsFixture as unknown);
|
||||||
});
|
});
|
||||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
// 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({
|
const dockerhub = await DockerHub.build({
|
||||||
credentials: {
|
credentials: {
|
||||||
username: 'foo',
|
username: 'foo',
|
||||||
@@ -74,11 +74,11 @@ describe('getRepositoryTags', () => {
|
|||||||
|
|
||||||
describe('getRepositoryAllTags', () => {
|
describe('getRepositoryAllTags', () => {
|
||||||
it('return repo all tags', async () => {
|
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);
|
return <Promise<RepositoryTagsResponse>>(repoAllTagsFixture as unknown);
|
||||||
});
|
});
|
||||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
// 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({
|
const dockerhub = await DockerHub.build({
|
||||||
credentials: {
|
credentials: {
|
||||||
username: 'foo',
|
username: 'foo',
|
||||||
|
|||||||
@@ -14,13 +14,13 @@
|
|||||||
* limitations under the License.
|
* 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', () => {
|
describe('exec', () => {
|
||||||
it('returns docker version', async () => {
|
it('returns docker version', async () => {
|
||||||
const execSpy = jest.spyOn(Exec, 'exec');
|
const execSpy = vi.spyOn(Exec, 'exec');
|
||||||
await Exec.exec('docker', ['version'], {
|
await Exec.exec('docker', ['version'], {
|
||||||
ignoreReturnCode: true,
|
ignoreReturnCode: true,
|
||||||
silent: true
|
silent: true
|
||||||
@@ -34,7 +34,7 @@ describe('exec', () => {
|
|||||||
|
|
||||||
describe('getExecOutput', () => {
|
describe('getExecOutput', () => {
|
||||||
it('returns docker version', async () => {
|
it('returns docker version', async () => {
|
||||||
const execSpy = jest.spyOn(Exec, 'getExecOutput');
|
const execSpy = vi.spyOn(Exec, 'getExecOutput');
|
||||||
await Exec.getExecOutput('docker', ['version'], {
|
await Exec.getExecOutput('docker', ['version'], {
|
||||||
ignoreReturnCode: true,
|
ignoreReturnCode: true,
|
||||||
silent: true
|
silent: true
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/**
|
/**
|
||||||
* Copyright 2024 actions-toolkit authors
|
* Copyright 2026 actions-toolkit authors
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
@@ -14,15 +14,12 @@
|
|||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* eslint-disable @typescript-eslint/no-require-imports */
|
import {describe, expect, it} from 'vitest';
|
||||||
const fs = require('fs');
|
|
||||||
|
|
||||||
module.exports = results => {
|
import {Git} from '../src/git.js';
|
||||||
const allSkipped = results.testResults.every(result => result.skipped);
|
|
||||||
if (allSkipped) {
|
describe('remoteSha', () => {
|
||||||
console.log('All tests were skipped!');
|
it('returns sha using github api', async () => {
|
||||||
fs.mkdirSync('./coverage', {recursive: true});
|
expect(await Git.remoteSha('https://github.com/docker/buildx.git', 'refs/pull/648/head', process.env.GITHUB_TOKEN)).toEqual('f11797113e5a9b86bd976329c5dbb8a8bfdfadfa');
|
||||||
fs.closeSync(fs.openSync('./coverage/allSkipped.txt', 'w'));
|
});
|
||||||
}
|
});
|
||||||
return results;
|
|
||||||
};
|
|
||||||
@@ -14,19 +14,19 @@
|
|||||||
* limitations under the License.
|
* 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 {Git} from '../src/git.js';
|
||||||
import {Exec} from '../src/exec';
|
import {Exec} from '../src/exec.js';
|
||||||
import {ExecOutput} from '@actions/exec';
|
import {ExecOutput} from '@actions/exec';
|
||||||
|
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
jest.restoreAllMocks();
|
vi.restoreAllMocks();
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('context', () => {
|
describe('context', () => {
|
||||||
it('returns mocked ref and sha', async () => {
|
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(' ')}`;
|
const fullCmd = `${cmd} ${args?.join(' ')}`;
|
||||||
let result = '';
|
let result = '';
|
||||||
switch (fullCmd) {
|
switch (fullCmd) {
|
||||||
@@ -54,7 +54,7 @@ describe('context', () => {
|
|||||||
|
|
||||||
describe('isInsideWorkTree', () => {
|
describe('isInsideWorkTree', () => {
|
||||||
it('have been called', async () => {
|
it('have been called', async () => {
|
||||||
const execSpy = jest.spyOn(Exec, 'getExecOutput');
|
const execSpy = vi.spyOn(Exec, 'getExecOutput');
|
||||||
try {
|
try {
|
||||||
await Git.isInsideWorkTree();
|
await Git.isInsideWorkTree();
|
||||||
} catch {
|
} catch {
|
||||||
@@ -71,14 +71,11 @@ describe('remoteSha', () => {
|
|||||||
it('returns sha using git ls-remote', async () => {
|
it('returns sha using git ls-remote', async () => {
|
||||||
expect(await Git.remoteSha('https://github.com/docker/buildx.git', 'refs/pull/648/head')).toEqual('f11797113e5a9b86bd976329c5dbb8a8bfdfadfa');
|
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', () => {
|
describe('remoteURL', () => {
|
||||||
it('have been called', async () => {
|
it('have been called', async () => {
|
||||||
const execSpy = jest.spyOn(Exec, 'getExecOutput');
|
const execSpy = vi.spyOn(Exec, 'getExecOutput');
|
||||||
try {
|
try {
|
||||||
await Git.remoteURL();
|
await Git.remoteURL();
|
||||||
} catch {
|
} catch {
|
||||||
@@ -93,7 +90,7 @@ describe('remoteURL', () => {
|
|||||||
|
|
||||||
describe('ref', () => {
|
describe('ref', () => {
|
||||||
it('returns mocked ref', async () => {
|
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(' ')}`;
|
const fullCmd = `${cmd} ${args?.join(' ')}`;
|
||||||
let result = '';
|
let result = '';
|
||||||
switch (fullCmd) {
|
switch (fullCmd) {
|
||||||
@@ -110,14 +107,12 @@ describe('ref', () => {
|
|||||||
exitCode: 0
|
exitCode: 0
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
const ref = await Git.ref();
|
const ref = await Git.ref();
|
||||||
|
|
||||||
expect(ref).toEqual('refs/heads/test');
|
expect(ref).toEqual('refs/heads/test');
|
||||||
});
|
});
|
||||||
|
|
||||||
it('returns mocked detached tag ref', async () => {
|
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(' ')}`;
|
const fullCmd = `${cmd} ${args?.join(' ')}`;
|
||||||
let result = '';
|
let result = '';
|
||||||
switch (fullCmd) {
|
switch (fullCmd) {
|
||||||
@@ -134,14 +129,12 @@ describe('ref', () => {
|
|||||||
exitCode: 0
|
exitCode: 0
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
const ref = await Git.ref();
|
const ref = await Git.ref();
|
||||||
|
|
||||||
expect(ref).toEqual('refs/tags/8.0.0');
|
expect(ref).toEqual('refs/tags/8.0.0');
|
||||||
});
|
});
|
||||||
|
|
||||||
it('returns mocked detached tag ref (shallow clone)', async () => {
|
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(' ')}`;
|
const fullCmd = `${cmd} ${args?.join(' ')}`;
|
||||||
let result = '';
|
let result = '';
|
||||||
switch (fullCmd) {
|
switch (fullCmd) {
|
||||||
@@ -158,14 +151,12 @@ describe('ref', () => {
|
|||||||
exitCode: 0
|
exitCode: 0
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
const ref = await Git.ref();
|
const ref = await Git.ref();
|
||||||
|
|
||||||
expect(ref).toEqual('refs/tags/8.0.0');
|
expect(ref).toEqual('refs/tags/8.0.0');
|
||||||
});
|
});
|
||||||
|
|
||||||
it('returns mocked detached pull request merge ref (shallow clone)', async () => {
|
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(' ')}`;
|
const fullCmd = `${cmd} ${args?.join(' ')}`;
|
||||||
let result = '';
|
let result = '';
|
||||||
switch (fullCmd) {
|
switch (fullCmd) {
|
||||||
@@ -182,14 +173,12 @@ describe('ref', () => {
|
|||||||
exitCode: 0
|
exitCode: 0
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
const ref = await Git.ref();
|
const ref = await Git.ref();
|
||||||
|
|
||||||
expect(ref).toEqual('refs/pull/221/merge');
|
expect(ref).toEqual('refs/pull/221/merge');
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should throws an error when detached HEAD ref is not supported', async () => {
|
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(' ')}`;
|
const fullCmd = `${cmd} ${args?.join(' ')}`;
|
||||||
let result = '';
|
let result = '';
|
||||||
switch (fullCmd) {
|
switch (fullCmd) {
|
||||||
@@ -206,12 +195,11 @@ describe('ref', () => {
|
|||||||
exitCode: 0
|
exitCode: 0
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
await expect(Git.ref()).rejects.toThrow('Cannot find detached HEAD ref in "wrong, HEAD, tag: 8.0.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 () => {
|
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(' ')}`;
|
const fullCmd = `${cmd} ${args?.join(' ')}`;
|
||||||
let result = '';
|
let result = '';
|
||||||
switch (fullCmd) {
|
switch (fullCmd) {
|
||||||
@@ -228,14 +216,12 @@ describe('ref', () => {
|
|||||||
exitCode: 0
|
exitCode: 0
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
const ref = await Git.ref();
|
const ref = await Git.ref();
|
||||||
|
|
||||||
expect(ref).toEqual('refs/heads/test');
|
expect(ref).toEqual('refs/heads/test');
|
||||||
});
|
});
|
||||||
|
|
||||||
it('returns mocked detached branch ref checked out by SHA', async () => {
|
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(' ')}`;
|
const fullCmd = `${cmd} ${args?.join(' ')}`;
|
||||||
let result = '';
|
let result = '';
|
||||||
switch (fullCmd) {
|
switch (fullCmd) {
|
||||||
@@ -252,14 +238,12 @@ describe('ref', () => {
|
|||||||
exitCode: 0
|
exitCode: 0
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
const ref = await Git.ref();
|
const ref = await Git.ref();
|
||||||
|
|
||||||
expect(ref).toEqual('refs/heads/feature-branch');
|
expect(ref).toEqual('refs/heads/feature-branch');
|
||||||
});
|
});
|
||||||
|
|
||||||
it('infers ref from local branch when detached HEAD returns only "HEAD"', async () => {
|
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(' ')}`;
|
const fullCmd = `${cmd} ${args?.join(' ')}`;
|
||||||
let result = '';
|
let result = '';
|
||||||
switch (fullCmd) {
|
switch (fullCmd) {
|
||||||
@@ -279,14 +263,12 @@ describe('ref', () => {
|
|||||||
exitCode: 0
|
exitCode: 0
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
const ref = await Git.ref();
|
const ref = await Git.ref();
|
||||||
|
|
||||||
expect(ref).toEqual('refs/heads/main');
|
expect(ref).toEqual('refs/heads/main');
|
||||||
});
|
});
|
||||||
|
|
||||||
it('infers ref from local branch when detached HEAD returns only "grafted, HEAD"', async () => {
|
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(' ')}`;
|
const fullCmd = `${cmd} ${args?.join(' ')}`;
|
||||||
let result = '';
|
let result = '';
|
||||||
switch (fullCmd) {
|
switch (fullCmd) {
|
||||||
@@ -306,14 +288,12 @@ describe('ref', () => {
|
|||||||
exitCode: 0
|
exitCode: 0
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
const ref = await Git.ref();
|
const ref = await Git.ref();
|
||||||
|
|
||||||
expect(ref).toEqual('refs/heads/main');
|
expect(ref).toEqual('refs/heads/main');
|
||||||
});
|
});
|
||||||
|
|
||||||
it('infers ref from remote branch when no local branch contains HEAD', async () => {
|
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(' ')}`;
|
const fullCmd = `${cmd} ${args?.join(' ')}`;
|
||||||
let result = '';
|
let result = '';
|
||||||
switch (fullCmd) {
|
switch (fullCmd) {
|
||||||
@@ -336,14 +316,12 @@ describe('ref', () => {
|
|||||||
exitCode: 0
|
exitCode: 0
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
const ref = await Git.ref();
|
const ref = await Git.ref();
|
||||||
|
|
||||||
expect(ref).toEqual('refs/heads/feature');
|
expect(ref).toEqual('refs/heads/feature');
|
||||||
});
|
});
|
||||||
|
|
||||||
it('infers ref from tag when no branch contains HEAD', async () => {
|
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(' ')}`;
|
const fullCmd = `${cmd} ${args?.join(' ')}`;
|
||||||
let result = '';
|
let result = '';
|
||||||
switch (fullCmd) {
|
switch (fullCmd) {
|
||||||
@@ -369,14 +347,12 @@ describe('ref', () => {
|
|||||||
exitCode: 0
|
exitCode: 0
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
const ref = await Git.ref();
|
const ref = await Git.ref();
|
||||||
|
|
||||||
expect(ref).toEqual('refs/tags/v1.0.0');
|
expect(ref).toEqual('refs/tags/v1.0.0');
|
||||||
});
|
});
|
||||||
|
|
||||||
it('throws error when cannot infer ref from detached HEAD', async () => {
|
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(' ')}`;
|
const fullCmd = `${cmd} ${args?.join(' ')}`;
|
||||||
let result = '';
|
let result = '';
|
||||||
switch (fullCmd) {
|
switch (fullCmd) {
|
||||||
@@ -402,12 +378,11 @@ describe('ref', () => {
|
|||||||
exitCode: 0
|
exitCode: 0
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
await expect(Git.ref()).rejects.toThrow('Cannot infer ref from detached HEAD');
|
await expect(Git.ref()).rejects.toThrow('Cannot infer ref from detached HEAD');
|
||||||
});
|
});
|
||||||
|
|
||||||
it('handles remote ref without branch pattern when inferring from remote', async () => {
|
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(' ')}`;
|
const fullCmd = `${cmd} ${args?.join(' ')}`;
|
||||||
let result = '';
|
let result = '';
|
||||||
switch (fullCmd) {
|
switch (fullCmd) {
|
||||||
@@ -430,16 +405,14 @@ describe('ref', () => {
|
|||||||
exitCode: 0
|
exitCode: 0
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
const ref = await Git.ref();
|
const ref = await Git.ref();
|
||||||
|
|
||||||
expect(ref).toEqual('refs/remotes/unusual-format');
|
expect(ref).toEqual('refs/remotes/unusual-format');
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('fullCommit', () => {
|
describe('fullCommit', () => {
|
||||||
it('have been called', async () => {
|
it('have been called', async () => {
|
||||||
const execSpy = jest.spyOn(Exec, 'getExecOutput');
|
const execSpy = vi.spyOn(Exec, 'getExecOutput');
|
||||||
try {
|
try {
|
||||||
await Git.fullCommit();
|
await Git.fullCommit();
|
||||||
} catch {
|
} catch {
|
||||||
@@ -454,7 +427,7 @@ describe('fullCommit', () => {
|
|||||||
|
|
||||||
describe('shortCommit', () => {
|
describe('shortCommit', () => {
|
||||||
it('have been called', async () => {
|
it('have been called', async () => {
|
||||||
const execSpy = jest.spyOn(Exec, 'getExecOutput');
|
const execSpy = vi.spyOn(Exec, 'getExecOutput');
|
||||||
try {
|
try {
|
||||||
await Git.shortCommit();
|
await Git.shortCommit();
|
||||||
} catch {
|
} catch {
|
||||||
@@ -469,7 +442,7 @@ describe('shortCommit', () => {
|
|||||||
|
|
||||||
describe('tag', () => {
|
describe('tag', () => {
|
||||||
it('have been called', async () => {
|
it('have been called', async () => {
|
||||||
const execSpy = jest.spyOn(Exec, 'getExecOutput');
|
const execSpy = vi.spyOn(Exec, 'getExecOutput');
|
||||||
try {
|
try {
|
||||||
await Git.tag();
|
await Git.tag();
|
||||||
} catch {
|
} catch {
|
||||||
@@ -485,6 +458,6 @@ describe('tag', () => {
|
|||||||
describe('getCommitDate', () => {
|
describe('getCommitDate', () => {
|
||||||
it('head', async () => {
|
it('head', async () => {
|
||||||
const date = await Git.commitDate('HEAD');
|
const date = await Git.commitDate('HEAD');
|
||||||
await expect(date).toBeInstanceOf(Date);
|
expect(date).toBeInstanceOf(Date);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
42
__tests__/github/artifact.test.itg.ts
Normal file
42
__tests__/github/artifact.test.itg.ts
Normal 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();
|
||||||
|
});
|
||||||
|
});
|
||||||
41
__tests__/github/github.test.itg.ts
Normal file
41
__tests__/github/github.test.itg.ts
Normal 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;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
@@ -14,21 +14,31 @@
|
|||||||
* limitations under the License.
|
* 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 fs from 'fs';
|
||||||
import * as path from 'path';
|
import * as path from 'path';
|
||||||
import * as core from '@actions/core';
|
import * as core from '@actions/core';
|
||||||
|
|
||||||
import {GitHub} from '../src/github';
|
import {GitHub} from '../../src/github/github.js';
|
||||||
import {GitHubRepo} from '../src/types/github';
|
import {GitHubRepo} from '../../src/types/github/github.js';
|
||||||
|
|
||||||
import repoFixture from './.fixtures/github-repo.json';
|
import repoFixture from '../.fixtures/github-repo.json' with {type: 'json'};
|
||||||
jest.spyOn(GitHub.prototype, 'repoData').mockImplementation((): Promise<GitHubRepo> => {
|
|
||||||
return <Promise<GitHubRepo>>(repoFixture as unknown);
|
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', () => {
|
describe('repoData', () => {
|
||||||
it('returns GitHub repo data', async () => {
|
it('returns GitHub repo data', async () => {
|
||||||
|
vi.spyOn(GitHub.prototype, 'repoData').mockImplementation((): Promise<GitHubRepo> => {
|
||||||
|
return <Promise<GitHubRepo>>(repoFixture as unknown);
|
||||||
|
});
|
||||||
const github = new GitHub();
|
const github = new GitHub();
|
||||||
expect((await github.repoData()).name).toEqual('Hello-World');
|
expect((await github.repoData()).name).toEqual('Hello-World');
|
||||||
});
|
});
|
||||||
@@ -53,7 +63,7 @@ describe('releases', () => {
|
|||||||
['.github/docker-releases.json'],
|
['.github/docker-releases.json'],
|
||||||
['.github/regclient-releases.json'],
|
['.github/regclient-releases.json'],
|
||||||
['.github/undock-releases.json'],
|
['.github/undock-releases.json'],
|
||||||
])('returns %p', async (path: string) => {
|
])('returns %o', async (path: string) => {
|
||||||
const github = new GitHub();
|
const github = new GitHub();
|
||||||
const releases = await github.releases('App', {
|
const releases = await github.releases('App', {
|
||||||
owner: 'docker',
|
owner: 'docker',
|
||||||
@@ -69,7 +79,7 @@ describe('releases', () => {
|
|||||||
describe('serverURL', () => {
|
describe('serverURL', () => {
|
||||||
const originalEnv = process.env;
|
const originalEnv = process.env;
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
jest.resetModules();
|
vi.resetModules();
|
||||||
process.env = {
|
process.env = {
|
||||||
...originalEnv,
|
...originalEnv,
|
||||||
GITHUB_SERVER_URL: 'https://foo.github.com'
|
GITHUB_SERVER_URL: 'https://foo.github.com'
|
||||||
@@ -90,7 +100,7 @@ describe('serverURL', () => {
|
|||||||
describe('apiURL', () => {
|
describe('apiURL', () => {
|
||||||
const originalEnv = process.env;
|
const originalEnv = process.env;
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
jest.resetModules();
|
vi.resetModules();
|
||||||
process.env = {
|
process.env = {
|
||||||
...originalEnv,
|
...originalEnv,
|
||||||
GITHUB_API_URL: 'https://bar.github.com'
|
GITHUB_API_URL: 'https://bar.github.com'
|
||||||
@@ -126,7 +136,7 @@ describe('workflowRunURL', () => {
|
|||||||
describe('actionsRuntimeToken', () => {
|
describe('actionsRuntimeToken', () => {
|
||||||
const originalEnv = process.env;
|
const originalEnv = process.env;
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
jest.resetModules();
|
vi.resetModules();
|
||||||
process.env = {
|
process.env = {
|
||||||
...originalEnv
|
...originalEnv
|
||||||
};
|
};
|
||||||
@@ -146,10 +156,7 @@ describe('actionsRuntimeToken', () => {
|
|||||||
}).toThrow();
|
}).toThrow();
|
||||||
});
|
});
|
||||||
it('fixture', async () => {
|
it('fixture', async () => {
|
||||||
process.env.ACTIONS_RUNTIME_TOKEN = fs
|
process.env.ACTIONS_RUNTIME_TOKEN = fs.readFileSync(path.join(fixturesDir, 'runtimeToken.txt')).toString().trim();
|
||||||
.readFileSync(path.join(__dirname, '.fixtures', 'runtimeToken.txt'))
|
|
||||||
.toString()
|
|
||||||
.trim();
|
|
||||||
const runtimeToken = GitHub.actionsRuntimeToken;
|
const runtimeToken = GitHub.actionsRuntimeToken;
|
||||||
expect(runtimeToken?.ac).toEqual('[{"Scope":"refs/heads/master","Permission":3}]');
|
expect(runtimeToken?.ac).toEqual('[{"Scope":"refs/heads/master","Permission":3}]');
|
||||||
expect(runtimeToken?.iss).toEqual('vstoken.actions.githubusercontent.com');
|
expect(runtimeToken?.iss).toEqual('vstoken.actions.githubusercontent.com');
|
||||||
@@ -159,7 +166,7 @@ describe('actionsRuntimeToken', () => {
|
|||||||
describe('printActionsRuntimeTokenACs', () => {
|
describe('printActionsRuntimeTokenACs', () => {
|
||||||
const originalEnv = process.env;
|
const originalEnv = process.env;
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
jest.resetModules();
|
vi.resetModules();
|
||||||
process.env = {
|
process.env = {
|
||||||
...originalEnv
|
...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'));
|
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 () => {
|
it('refs/heads/master', async () => {
|
||||||
const infoSpy = jest.spyOn(core, 'info');
|
const infoSpy = vi.mocked(core.info);
|
||||||
process.env.ACTIONS_RUNTIME_TOKEN = fs
|
process.env.ACTIONS_RUNTIME_TOKEN = fs.readFileSync(path.join(fixturesDir, 'runtimeToken.txt')).toString().trim();
|
||||||
.readFileSync(path.join(__dirname, '.fixtures', 'runtimeToken.txt'))
|
|
||||||
.toString()
|
|
||||||
.trim();
|
|
||||||
await GitHub.printActionsRuntimeTokenACs();
|
await GitHub.printActionsRuntimeTokenACs();
|
||||||
expect(infoSpy).toHaveBeenCalledTimes(1);
|
expect(infoSpy).toHaveBeenCalledTimes(1);
|
||||||
expect(infoSpy).toHaveBeenCalledWith(`refs/heads/master: read/write`);
|
expect(infoSpy).toHaveBeenCalledWith(`refs/heads/master: read/write`);
|
||||||
@@ -14,39 +14,24 @@
|
|||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import {describe, expect, it, test} from '@jest/globals';
|
import {describe, expect, it, test} from 'vitest';
|
||||||
import fs from 'fs';
|
import fs from 'fs';
|
||||||
import os from 'os';
|
import os from 'os';
|
||||||
import path from 'path';
|
import path from 'path';
|
||||||
|
|
||||||
import {Buildx} from '../src/buildx/buildx';
|
import {Buildx} from '../../src/buildx/buildx.js';
|
||||||
import {Bake} from '../src/buildx/bake';
|
import {Bake} from '../../src/buildx/bake.js';
|
||||||
import {Build} from '../src/buildx/build';
|
import {Build} from '../../src/buildx/build.js';
|
||||||
import {Exec} from '../src/exec';
|
import {Exec} from '../../src/exec.js';
|
||||||
import {GitHub} from '../src/github';
|
import {GitHubArtifact} from '../../src/github/artifact.js';
|
||||||
import {History} from '../src/buildx/history';
|
import {GitHubSummary} from '../../src/github/summary.js';
|
||||||
import {Util} from '../src/util';
|
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 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;
|
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', () => {
|
maybe('writeBuildSummary', () => {
|
||||||
// prettier-ignore
|
// prettier-ignore
|
||||||
test.each([
|
test.each([
|
||||||
@@ -98,15 +83,14 @@ maybe('writeBuildSummary', () => {
|
|||||||
expect(exportRes?.dockerbuildSize).toBeDefined();
|
expect(exportRes?.dockerbuildSize).toBeDefined();
|
||||||
expect(exportRes?.summaries).toBeDefined();
|
expect(exportRes?.summaries).toBeDefined();
|
||||||
|
|
||||||
const uploadRes = await GitHub.uploadArtifact({
|
const uploadRes = await GitHubArtifact.upload({
|
||||||
filename: exportRes?.dockerbuildFilename,
|
filename: exportRes?.dockerbuildFilename,
|
||||||
mimeType: 'application/gzip',
|
|
||||||
retentionDays: 1
|
retentionDays: 1
|
||||||
});
|
});
|
||||||
expect(uploadRes).toBeDefined();
|
expect(uploadRes).toBeDefined();
|
||||||
expect(uploadRes?.url).toBeDefined();
|
expect(uploadRes?.url).toBeDefined();
|
||||||
|
|
||||||
await GitHub.writeBuildSummary({
|
await GitHubSummary.writeBuildSummary({
|
||||||
exportRes: exportRes,
|
exportRes: exportRes,
|
||||||
uploadRes: uploadRes,
|
uploadRes: uploadRes,
|
||||||
inputs: {
|
inputs: {
|
||||||
@@ -178,15 +162,14 @@ maybe('writeBuildSummary', () => {
|
|||||||
expect(exportRes?.dockerbuildSize).toBeDefined();
|
expect(exportRes?.dockerbuildSize).toBeDefined();
|
||||||
expect(exportRes?.summaries).toBeDefined();
|
expect(exportRes?.summaries).toBeDefined();
|
||||||
|
|
||||||
const uploadRes = await GitHub.uploadArtifact({
|
const uploadRes = await GitHubArtifact.upload({
|
||||||
filename: exportRes?.dockerbuildFilename,
|
filename: exportRes?.dockerbuildFilename,
|
||||||
mimeType: 'application/gzip',
|
|
||||||
retentionDays: 1
|
retentionDays: 1
|
||||||
});
|
});
|
||||||
expect(uploadRes).toBeDefined();
|
expect(uploadRes).toBeDefined();
|
||||||
expect(uploadRes?.url).toBeDefined();
|
expect(uploadRes?.url).toBeDefined();
|
||||||
|
|
||||||
await GitHub.writeBuildSummary({
|
await GitHubSummary.writeBuildSummary({
|
||||||
exportRes: exportRes,
|
exportRes: exportRes,
|
||||||
uploadRes: uploadRes,
|
uploadRes: uploadRes,
|
||||||
inputs: {
|
inputs: {
|
||||||
@@ -233,15 +216,14 @@ maybe('writeBuildSummary', () => {
|
|||||||
expect(exportRes?.dockerbuildSize).toBeDefined();
|
expect(exportRes?.dockerbuildSize).toBeDefined();
|
||||||
expect(exportRes?.summaries).toBeDefined();
|
expect(exportRes?.summaries).toBeDefined();
|
||||||
|
|
||||||
const uploadRes = await GitHub.uploadArtifact({
|
const uploadRes = await GitHubArtifact.upload({
|
||||||
filename: exportRes?.dockerbuildFilename,
|
filename: exportRes?.dockerbuildFilename,
|
||||||
mimeType: 'application/gzip',
|
|
||||||
retentionDays: 1
|
retentionDays: 1
|
||||||
});
|
});
|
||||||
expect(uploadRes).toBeDefined();
|
expect(uploadRes).toBeDefined();
|
||||||
expect(uploadRes?.url).toBeDefined();
|
expect(uploadRes?.url).toBeDefined();
|
||||||
|
|
||||||
await GitHub.writeBuildSummary({
|
await GitHubSummary.writeBuildSummary({
|
||||||
exportRes: exportRes,
|
exportRes: exportRes,
|
||||||
uploadRes: uploadRes,
|
uploadRes: uploadRes,
|
||||||
inputs: {
|
inputs: {
|
||||||
@@ -288,7 +270,7 @@ maybe('writeBuildSummary', () => {
|
|||||||
expect(exportRes?.dockerbuildSize).toBeDefined();
|
expect(exportRes?.dockerbuildSize).toBeDefined();
|
||||||
expect(exportRes?.summaries).toBeDefined();
|
expect(exportRes?.summaries).toBeDefined();
|
||||||
|
|
||||||
await GitHub.writeBuildSummary({
|
await GitHubSummary.writeBuildSummary({
|
||||||
exportRes: exportRes,
|
exportRes: exportRes,
|
||||||
inputs: {
|
inputs: {
|
||||||
context: fixturesDir,
|
context: fixturesDir,
|
||||||
@@ -14,16 +14,17 @@
|
|||||||
* limitations under the License.
|
* 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 fs from 'fs';
|
||||||
import os from 'os';
|
import os from 'os';
|
||||||
import path from 'path';
|
import path from 'path';
|
||||||
import * as rimraf from 'rimraf';
|
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 fixturesDir = path.join(__dirname, '..', '.fixtures');
|
||||||
const tmpDir = fs.mkdtempSync(path.join(process.env.TEMP || os.tmpdir(), 'oci-oci-'));
|
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', 'ppc64', {architecture: 'ppc64le', os: 'linux'}],
|
||||||
['linux', 's390x', {architecture: 's390x', os: 'linux'}]
|
['linux', 's390x', {architecture: 's390x', os: 'linux'}]
|
||||||
])('default platform for %s/%s', async (os: string, arch: string, expected: Platform) => {
|
])('default platform for %s/%s', async (os: string, arch: string, expected: Platform) => {
|
||||||
jest.spyOn(osm, 'platform').mockImplementation(() => os as NodeJS.Platform);
|
mockPlatform(os as NodeJS.Platform);
|
||||||
jest.spyOn(osm, 'arch').mockImplementation(() => arch);
|
mockArch(arch);
|
||||||
const res = OCI.defaultPlatform();
|
const res = OCI.defaultPlatform();
|
||||||
expect(res).toEqual(expected);
|
expect(res).toEqual(expected);
|
||||||
});
|
});
|
||||||
@@ -55,7 +56,7 @@ describe('loadArchive', () => {
|
|||||||
// prettier-ignore
|
// prettier-ignore
|
||||||
test.each(fs.readdirSync(path.join(fixturesDir, 'oci-archive')).filter(file => {
|
test.each(fs.readdirSync(path.join(fixturesDir, 'oci-archive')).filter(file => {
|
||||||
return fs.statSync(path.join(path.join(fixturesDir, 'oci-archive'), file)).isFile();
|
return fs.statSync(path.join(path.join(fixturesDir, 'oci-archive'), file)).isFile();
|
||||||
}).map(filename => [filename]))('extracting %p', async (filename) => {
|
}).map(filename => [filename]))('extracting %o', async (filename) => {
|
||||||
const res = await OCI.loadArchive({
|
const res = await OCI.loadArchive({
|
||||||
file: path.join(fixturesDir, 'oci-archive', filename)
|
file: path.join(fixturesDir, 'oci-archive', filename)
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -14,10 +14,10 @@
|
|||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import {describe, expect, test} from '@jest/globals';
|
import {describe, expect, test} from 'vitest';
|
||||||
import * as fs from 'fs';
|
import * as fs from 'fs';
|
||||||
|
|
||||||
import {Install} from '../../src/regclient/install';
|
import {Install} from '../../src/regclient/install.js';
|
||||||
|
|
||||||
describe('download', () => {
|
describe('download', () => {
|
||||||
// prettier-ignore
|
// prettier-ignore
|
||||||
|
|||||||
@@ -14,14 +14,15 @@
|
|||||||
* limitations under the License.
|
* 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 fs from 'fs';
|
||||||
import os from 'os';
|
import os from 'os';
|
||||||
import path from 'path';
|
import path from 'path';
|
||||||
import * as rimraf from 'rimraf';
|
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-'));
|
const tmpDir = fs.mkdtempSync(path.join(process.env.TEMP || os.tmpdir(), 'regclient-install-'));
|
||||||
|
|
||||||
@@ -35,7 +36,7 @@ describe('download', () => {
|
|||||||
['v0.8.2'],
|
['v0.8.2'],
|
||||||
['latest']
|
['latest']
|
||||||
])(
|
])(
|
||||||
'acquires %p of regclient', async (version) => {
|
'acquires %o of regclient', async (version) => {
|
||||||
const install = new Install();
|
const install = new Install();
|
||||||
const toolPath = await install.download(version);
|
const toolPath = await install.download(version);
|
||||||
expect(fs.existsSync(toolPath)).toBe(true);
|
expect(fs.existsSync(toolPath)).toBe(true);
|
||||||
@@ -48,7 +49,7 @@ describe('download', () => {
|
|||||||
// following versions are already cached to htc from previous test cases
|
// following versions are already cached to htc from previous test cases
|
||||||
['v0.8.2'],
|
['v0.8.2'],
|
||||||
])(
|
])(
|
||||||
'acquires %p of regclient with cache', async (version) => {
|
'acquires %o of regclient with cache', async (version) => {
|
||||||
const install = new Install();
|
const install = new Install();
|
||||||
const toolPath = await install.download(version);
|
const toolPath = await install.download(version);
|
||||||
expect(fs.existsSync(toolPath)).toBe(true);
|
expect(fs.existsSync(toolPath)).toBe(true);
|
||||||
@@ -58,7 +59,7 @@ describe('download', () => {
|
|||||||
test.each([
|
test.each([
|
||||||
['v0.8.1'],
|
['v0.8.1'],
|
||||||
])(
|
])(
|
||||||
'acquires %p of regclient without cache', async (version) => {
|
'acquires %o of regclient without cache', async (version) => {
|
||||||
const install = new Install();
|
const install = new Install();
|
||||||
const toolPath = await install.download(version, true);
|
const toolPath = await install.download(version, true);
|
||||||
expect(fs.existsSync(toolPath)).toBe(true);
|
expect(fs.existsSync(toolPath)).toBe(true);
|
||||||
@@ -75,8 +76,8 @@ describe('download', () => {
|
|||||||
['linux', 's390x'],
|
['linux', 's390x'],
|
||||||
])(
|
])(
|
||||||
'acquires regclient for %s/%s', async (os, arch) => {
|
'acquires regclient for %s/%s', async (os, arch) => {
|
||||||
jest.spyOn(osm, 'platform').mockImplementation(() => os as NodeJS.Platform);
|
mockPlatform(os as NodeJS.Platform);
|
||||||
jest.spyOn(osm, 'arch').mockImplementation(() => arch);
|
mockArch(arch);
|
||||||
const install = new Install();
|
const install = new Install();
|
||||||
const regclientBin = await install.download('latest');
|
const regclientBin = await install.download('latest');
|
||||||
expect(fs.existsSync(regclientBin)).toBe(true);
|
expect(fs.existsSync(regclientBin)).toBe(true);
|
||||||
|
|||||||
@@ -14,20 +14,20 @@
|
|||||||
* limitations under the License.
|
* 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 * as semver from 'semver';
|
||||||
|
|
||||||
import {Exec} from '../../src/exec';
|
import {Exec} from '../../src/exec.js';
|
||||||
import {Regctl} from '../../src/regclient/regctl';
|
import {Regctl} from '../../src/regclient/regctl.js';
|
||||||
|
|
||||||
import {Image} from '../../src/types/oci/config';
|
import {Image} from '../../src/types/oci/config.js';
|
||||||
|
|
||||||
describe('manifestGet', () => {
|
describe('manifestGet', () => {
|
||||||
// prettier-ignore
|
// prettier-ignore
|
||||||
test.each([
|
test.each([
|
||||||
['moby/moby-bin:28.1.0-rc.2'],
|
['moby/moby-bin:28.1.0-rc.2'],
|
||||||
['crazymax/diun:4.17.0'],
|
['crazymax/diun:4.17.0'],
|
||||||
])('given %p', async image => {
|
])('given %o', async image => {
|
||||||
const regctl = new Regctl();
|
const regctl = new Regctl();
|
||||||
const manifest = await regctl.manifestGet({
|
const manifest = await regctl.manifestGet({
|
||||||
image: image,
|
image: image,
|
||||||
@@ -45,7 +45,7 @@ describe('blobGet', () => {
|
|||||||
test.each([
|
test.each([
|
||||||
['moby/moby-bin', 'sha256:234fccbd13fde0ba978a19f728cbdc67e29bc76247ac560822bb6ae5236c0bf0'],
|
['moby/moby-bin', 'sha256:234fccbd13fde0ba978a19f728cbdc67e29bc76247ac560822bb6ae5236c0bf0'],
|
||||||
['crazymax/diun', 'sha256:1e4881f66e0ec0f1710b837002107050bbbc0a231d8a42d7f422b56a139900bb'],
|
['crazymax/diun', 'sha256:1e4881f66e0ec0f1710b837002107050bbbc0a231d8a42d7f422b56a139900bb'],
|
||||||
])('given %p', async (repo, digest) => {
|
])('given %o', async (repo, digest) => {
|
||||||
const regctl = new Regctl();
|
const regctl = new Regctl();
|
||||||
const blob = await regctl.blobGet({
|
const blob = await regctl.blobGet({
|
||||||
repository: repo,
|
repository: repo,
|
||||||
@@ -60,7 +60,7 @@ describe('image config', () => {
|
|||||||
test.each([
|
test.each([
|
||||||
['moby/moby-bin:28.1.0-rc.2'],
|
['moby/moby-bin:28.1.0-rc.2'],
|
||||||
['crazymax/diun:4.17.0'],
|
['crazymax/diun:4.17.0'],
|
||||||
])('given %p', async image => {
|
])('given %o', async image => {
|
||||||
const regctl = new Regctl();
|
const regctl = new Regctl();
|
||||||
const manifest = await regctl.manifestGet({
|
const manifest = await regctl.manifestGet({
|
||||||
image: image,
|
image: image,
|
||||||
@@ -82,7 +82,7 @@ describe('image config', () => {
|
|||||||
|
|
||||||
describe('isAvailable', () => {
|
describe('isAvailable', () => {
|
||||||
it('checks regctl is available', async () => {
|
it('checks regctl is available', async () => {
|
||||||
const execSpy = jest.spyOn(Exec, 'getExecOutput');
|
const execSpy = vi.spyOn(Exec, 'getExecOutput');
|
||||||
const regctl = new Regctl();
|
const regctl = new Regctl();
|
||||||
await regctl.isAvailable();
|
await regctl.isAvailable();
|
||||||
expect(execSpy).toHaveBeenCalledWith(`regctl`, [], {
|
expect(execSpy).toHaveBeenCalledWith(`regctl`, [], {
|
||||||
@@ -94,7 +94,7 @@ describe('isAvailable', () => {
|
|||||||
|
|
||||||
describe('printVersion', () => {
|
describe('printVersion', () => {
|
||||||
it('prints regctl version', async () => {
|
it('prints regctl version', async () => {
|
||||||
const execSpy = jest.spyOn(Exec, 'exec');
|
const execSpy = vi.spyOn(Exec, 'exec');
|
||||||
const regctl = new Regctl();
|
const regctl = new Regctl();
|
||||||
await regctl.printVersion();
|
await regctl.printVersion();
|
||||||
expect(execSpy).toHaveBeenCalledWith(`regctl`, ['version'], {
|
expect(execSpy).toHaveBeenCalledWith(`regctl`, ['version'], {
|
||||||
@@ -115,7 +115,7 @@ describe('versionSatisfies', () => {
|
|||||||
['v0.8.2', '>=0.6.0', true],
|
['v0.8.2', '>=0.6.0', true],
|
||||||
['v0.8.0', '>0.6.0', true],
|
['v0.8.0', '>0.6.0', true],
|
||||||
['v0.8.0', '<0.3.0', false]
|
['v0.8.0', '<0.3.0', false]
|
||||||
])('given %p', async (version, range, expected) => {
|
])('given %o', async (version, range, expected) => {
|
||||||
const regctl = new Regctl();
|
const regctl = new Regctl();
|
||||||
expect(await regctl.versionSatisfies(range, version)).toBe(expected);
|
expect(await regctl.versionSatisfies(range, version)).toBe(expected);
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -14,15 +14,15 @@
|
|||||||
* limitations under the License.
|
* 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 * as path from 'path';
|
||||||
|
|
||||||
import {Buildx} from '../../src/buildx/buildx';
|
import {Buildx} from '../../src/buildx/buildx.js';
|
||||||
import {Build} from '../../src/buildx/build';
|
import {Build} from '../../src/buildx/build.js';
|
||||||
import {Install as CosignInstall} from '../../src/cosign/install';
|
import {Install as CosignInstall} from '../../src/cosign/install.js';
|
||||||
import {Docker} from '../../src/docker/docker';
|
import {Docker} from '../../src/docker/docker.js';
|
||||||
import {Exec} from '../../src/exec';
|
import {Exec} from '../../src/exec.js';
|
||||||
import {Sigstore} from '../../src/sigstore/sigstore';
|
import {Sigstore} from '../../src/sigstore/sigstore.js';
|
||||||
|
|
||||||
const fixturesDir = path.join(__dirname, '..', '.fixtures');
|
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;
|
const maybeIdToken = runTest && process.env.ACTIONS_ID_TOKEN_REQUEST_URL ? describe : describe.skip;
|
||||||
|
|
||||||
// needs current GitHub repo info
|
|
||||||
jest.unmock('@actions/github');
|
|
||||||
|
|
||||||
beforeAll(async () => {
|
beforeAll(async () => {
|
||||||
const cosignInstall = new CosignInstall();
|
const cosignInstall = new CosignInstall();
|
||||||
const cosignBinPath = await cosignInstall.download({
|
const cosignBinPath = await cosignInstall.download({
|
||||||
|
|||||||
@@ -14,17 +14,17 @@
|
|||||||
* limitations under the License.
|
* 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 fs from 'fs';
|
||||||
import * as path from 'path';
|
import * as path from 'path';
|
||||||
|
|
||||||
import {Buildx} from '../../src/buildx/buildx';
|
import {Buildx} from '../../src/buildx/buildx.js';
|
||||||
import {Build} from '../../src/buildx/build';
|
import {Build} from '../../src/buildx/build.js';
|
||||||
import {Install as CosignInstall} from '../../src/cosign/install';
|
import {Install as CosignInstall} from '../../src/cosign/install.js';
|
||||||
import {Docker} from '../../src/docker/docker';
|
import {Docker} from '../../src/docker/docker.js';
|
||||||
import {Exec} from '../../src/exec';
|
import {Exec} from '../../src/exec.js';
|
||||||
import {OCI} from '../../src/oci/oci';
|
import {OCI} from '../../src/oci/oci.js';
|
||||||
import {Sigstore} from '../../src/sigstore/sigstore';
|
import {Sigstore} from '../../src/sigstore/sigstore.js';
|
||||||
|
|
||||||
const fixturesDir = path.join(__dirname, '..', '.fixtures');
|
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 maybe = runTest ? describe : describe.skip;
|
||||||
const maybeIdToken = runTest && process.env.ACTIONS_ID_TOKEN_REQUEST_URL ? 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 () => {
|
beforeAll(async () => {
|
||||||
const cosignInstall = new CosignInstall();
|
const cosignInstall = new CosignInstall();
|
||||||
const cosignBinPath = await cosignInstall.download({
|
const cosignBinPath = await cosignInstall.download({
|
||||||
|
|||||||
@@ -14,10 +14,10 @@
|
|||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import {describe, expect, test} from '@jest/globals';
|
import {describe, expect, test} from 'vitest';
|
||||||
import * as fs from 'fs';
|
import * as fs from 'fs';
|
||||||
|
|
||||||
import {Install} from '../../src/undock/install';
|
import {Install} from '../../src/undock/install.js';
|
||||||
|
|
||||||
describe('download', () => {
|
describe('download', () => {
|
||||||
// prettier-ignore
|
// prettier-ignore
|
||||||
|
|||||||
@@ -14,14 +14,15 @@
|
|||||||
* limitations under the License.
|
* 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 fs from 'fs';
|
||||||
import os from 'os';
|
import os from 'os';
|
||||||
import path from 'path';
|
import path from 'path';
|
||||||
import * as rimraf from 'rimraf';
|
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-'));
|
const tmpDir = fs.mkdtempSync(path.join(process.env.TEMP || os.tmpdir(), 'undock-install-'));
|
||||||
|
|
||||||
@@ -36,7 +37,7 @@ describe('download', () => {
|
|||||||
['v0.7.0'],
|
['v0.7.0'],
|
||||||
['latest']
|
['latest']
|
||||||
])(
|
])(
|
||||||
'acquires %p of undock', async (version) => {
|
'acquires %o of undock', async (version) => {
|
||||||
const install = new Install();
|
const install = new Install();
|
||||||
const toolPath = await install.download(version);
|
const toolPath = await install.download(version);
|
||||||
expect(fs.existsSync(toolPath)).toBe(true);
|
expect(fs.existsSync(toolPath)).toBe(true);
|
||||||
@@ -50,7 +51,7 @@ describe('download', () => {
|
|||||||
['v0.4.0'],
|
['v0.4.0'],
|
||||||
['v0.7.0'],
|
['v0.7.0'],
|
||||||
])(
|
])(
|
||||||
'acquires %p of undock with cache', async (version) => {
|
'acquires %o of undock with cache', async (version) => {
|
||||||
const install = new Install();
|
const install = new Install();
|
||||||
const toolPath = await install.download(version);
|
const toolPath = await install.download(version);
|
||||||
expect(fs.existsSync(toolPath)).toBe(true);
|
expect(fs.existsSync(toolPath)).toBe(true);
|
||||||
@@ -61,7 +62,7 @@ describe('download', () => {
|
|||||||
['v0.5.0'],
|
['v0.5.0'],
|
||||||
['v0.6.0'],
|
['v0.6.0'],
|
||||||
])(
|
])(
|
||||||
'acquires %p of undock without cache', async (version) => {
|
'acquires %o of undock without cache', async (version) => {
|
||||||
const install = new Install();
|
const install = new Install();
|
||||||
const toolPath = await install.download(version, true);
|
const toolPath = await install.download(version, true);
|
||||||
expect(fs.existsSync(toolPath)).toBe(true);
|
expect(fs.existsSync(toolPath)).toBe(true);
|
||||||
@@ -80,8 +81,8 @@ describe('download', () => {
|
|||||||
['linux', 's390x'],
|
['linux', 's390x'],
|
||||||
])(
|
])(
|
||||||
'acquires undock for %s/%s', async (os, arch) => {
|
'acquires undock for %s/%s', async (os, arch) => {
|
||||||
jest.spyOn(osm, 'platform').mockImplementation(() => os as NodeJS.Platform);
|
mockPlatform(os as NodeJS.Platform);
|
||||||
jest.spyOn(osm, 'arch').mockImplementation(() => arch);
|
mockArch(arch);
|
||||||
const install = new Install();
|
const install = new Install();
|
||||||
const undockBin = await install.download('latest');
|
const undockBin = await install.download('latest');
|
||||||
expect(fs.existsSync(undockBin)).toBe(true);
|
expect(fs.existsSync(undockBin)).toBe(true);
|
||||||
|
|||||||
@@ -14,12 +14,12 @@
|
|||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import {describe, expect, it} from '@jest/globals';
|
import {describe, expect, it} from 'vitest';
|
||||||
import fs from 'fs';
|
import fs from 'fs';
|
||||||
import os from 'os';
|
import os from 'os';
|
||||||
|
|
||||||
import {Undock} from '../../src/undock/undock';
|
import {Undock} from '../../src/undock/undock.js';
|
||||||
import {Install as UndockInstall} from '../../src/undock/install';
|
import {Install as UndockInstall} from '../../src/undock/install.js';
|
||||||
|
|
||||||
describe('run', () => {
|
describe('run', () => {
|
||||||
it('extracts moby/moby-bin:26.1.5', async () => {
|
it('extracts moby/moby-bin:26.1.5', async () => {
|
||||||
|
|||||||
@@ -17,11 +17,11 @@
|
|||||||
import fs from 'fs';
|
import fs from 'fs';
|
||||||
import os from 'os';
|
import os from 'os';
|
||||||
import path from 'path';
|
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 * as semver from 'semver';
|
||||||
|
|
||||||
import {Exec} from '../../src/exec';
|
import {Exec} from '../../src/exec.js';
|
||||||
import {Undock} from '../../src/undock/undock';
|
import {Undock} from '../../src/undock/undock.js';
|
||||||
|
|
||||||
const tmpDir = fs.mkdtempSync(path.join(process.env.TEMP || os.tmpdir(), 'undock-undock-'));
|
const tmpDir = fs.mkdtempSync(path.join(process.env.TEMP || os.tmpdir(), 'undock-undock-'));
|
||||||
|
|
||||||
@@ -43,7 +43,7 @@ describe('run', () => {
|
|||||||
|
|
||||||
describe('isAvailable', () => {
|
describe('isAvailable', () => {
|
||||||
it('checks undock is available', async () => {
|
it('checks undock is available', async () => {
|
||||||
const execSpy = jest.spyOn(Exec, 'getExecOutput');
|
const execSpy = vi.spyOn(Exec, 'getExecOutput');
|
||||||
const undock = new Undock();
|
const undock = new Undock();
|
||||||
await undock.isAvailable();
|
await undock.isAvailable();
|
||||||
expect(execSpy).toHaveBeenCalledWith(`undock`, [], {
|
expect(execSpy).toHaveBeenCalledWith(`undock`, [], {
|
||||||
@@ -55,7 +55,7 @@ describe('isAvailable', () => {
|
|||||||
|
|
||||||
describe('printVersion', () => {
|
describe('printVersion', () => {
|
||||||
it('prints undock version', async () => {
|
it('prints undock version', async () => {
|
||||||
const execSpy = jest.spyOn(Exec, 'exec');
|
const execSpy = vi.spyOn(Exec, 'exec');
|
||||||
const undock = new Undock();
|
const undock = new Undock();
|
||||||
await undock.printVersion();
|
await undock.printVersion();
|
||||||
expect(execSpy).toHaveBeenCalledWith(`undock`, ['--version'], {
|
expect(execSpy).toHaveBeenCalledWith(`undock`, ['--version'], {
|
||||||
@@ -76,7 +76,7 @@ describe('versionSatisfies', () => {
|
|||||||
['v0.4.1', '>=0.3.2', true],
|
['v0.4.1', '>=0.3.2', true],
|
||||||
['v0.8.0', '>0.6.0', true],
|
['v0.8.0', '>0.6.0', true],
|
||||||
['v0.8.0', '<0.3.0', false]
|
['v0.8.0', '<0.3.0', false]
|
||||||
])('given %p', async (version, range, expected) => {
|
])('given %o', async (version, range, expected) => {
|
||||||
const undock = new Undock();
|
const undock = new Undock();
|
||||||
expect(await undock.versionSatisfies(range, version)).toBe(expected);
|
expect(await undock.versionSatisfies(range, version)).toBe(expected);
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -14,11 +14,11 @@
|
|||||||
* limitations under the License.
|
* 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 fs from 'fs';
|
||||||
import * as path from 'path';
|
import * as path from 'path';
|
||||||
|
|
||||||
import {Util} from '../src/util';
|
import {Util} from '../src/util.js';
|
||||||
|
|
||||||
describe('getInputList', () => {
|
describe('getInputList', () => {
|
||||||
it('single line correctly', async () => {
|
it('single line correctly', async () => {
|
||||||
@@ -247,7 +247,7 @@ describe('isValidURL', () => {
|
|||||||
['git://github.com/user/repo.git', false],
|
['git://github.com/user/repo.git', false],
|
||||||
['github.com/moby/buildkit.git#main', false],
|
['github.com/moby/buildkit.git#main', false],
|
||||||
['v0.4.1', false]
|
['v0.4.1', false]
|
||||||
])('given %p', async (url, expected) => {
|
])('given %o', async (url, expected) => {
|
||||||
expect(Util.isValidURL(url)).toEqual(expected);
|
expect(Util.isValidURL(url)).toEqual(expected);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
@@ -260,7 +260,7 @@ describe('isValidRef', () => {
|
|||||||
['git://github.com/user/repo.git', true],
|
['git://github.com/user/repo.git', true],
|
||||||
['github.com/moby/buildkit.git#main', true],
|
['github.com/moby/buildkit.git#main', true],
|
||||||
['v0.4.1', false]
|
['v0.4.1', false]
|
||||||
])('given %p', async (url, expected) => {
|
])('given %o', async (url, expected) => {
|
||||||
expect(Util.isValidRef(url)).toEqual(expected);
|
expect(Util.isValidRef(url)).toEqual(expected);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
@@ -278,7 +278,7 @@ describe('trimPrefix', () => {
|
|||||||
['abcdabc', 'abc', 'dabc'],
|
['abcdabc', 'abc', 'dabc'],
|
||||||
['abcabc', 'abc', 'abc'],
|
['abcabc', 'abc', 'abc'],
|
||||||
['abcdabc', 'd', 'abcdabc']
|
['abcdabc', 'd', 'abcdabc']
|
||||||
])('given %p', async (str, prefix, expected) => {
|
])('given %o', async (str, prefix, expected) => {
|
||||||
expect(Util.trimPrefix(str, prefix)).toEqual(expected);
|
expect(Util.trimPrefix(str, prefix)).toEqual(expected);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
@@ -295,7 +295,7 @@ describe('trimSuffix', () => {
|
|||||||
['abcdabc', 'abc', 'abcd'],
|
['abcdabc', 'abc', 'abcd'],
|
||||||
['abcabc', 'abc', 'abc'],
|
['abcabc', 'abc', 'abc'],
|
||||||
['abcdabc', 'd', 'abcdabc']
|
['abcdabc', 'd', 'abcdabc']
|
||||||
])('given %p', async (str, suffix, expected) => {
|
])('given %o', async (str, suffix, expected) => {
|
||||||
expect(Util.trimSuffix(str, suffix)).toEqual(expected);
|
expect(Util.trimSuffix(str, suffix)).toEqual(expected);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
@@ -326,10 +326,10 @@ describe('parseBool', () => {
|
|||||||
].forEach(({input, expected, throwsError}) => {
|
].forEach(({input, expected, throwsError}) => {
|
||||||
test(`parseBool("${input}")`, () => {
|
test(`parseBool("${input}")`, () => {
|
||||||
if (throwsError) {
|
if (throwsError) {
|
||||||
// eslint-disable-next-line jest/no-conditional-expect
|
// eslint-disable-next-line vitest/no-conditional-expect
|
||||||
expect(() => Util.parseBool(input)).toThrow();
|
expect(() => Util.parseBool(input)).toThrow();
|
||||||
} else {
|
} else {
|
||||||
// eslint-disable-next-line jest/no-conditional-expect
|
// eslint-disable-next-line vitest/no-conditional-expect
|
||||||
expect(Util.parseBool(input)).toBe(expected);
|
expect(Util.parseBool(input)).toBe(expected);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -14,9 +14,9 @@
|
|||||||
# See the License for the specific language governing permissions and
|
# See the License for the specific language governing permissions and
|
||||||
# limitations under the License.
|
# limitations under the License.
|
||||||
|
|
||||||
ARG NODE_VERSION=20
|
ARG NODE_VERSION=24
|
||||||
ARG DOCKER_VERSION=28.3
|
ARG DOCKER_VERSION=29.2
|
||||||
ARG BUILDX_VERSION=0.31.0
|
ARG BUILDX_VERSION=0.32.0-rc2
|
||||||
ARG COMPOSE_VERSION=2.39.1
|
ARG COMPOSE_VERSION=2.39.1
|
||||||
ARG UNDOCK_VERSION=0.10.0
|
ARG UNDOCK_VERSION=0.10.0
|
||||||
ARG REGCTL_VERSION=v0.8.2
|
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=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=regctl,source=/regctl,target=/usr/bin/regctl \
|
||||||
--mount=type=bind,from=cosign,source=/ko-app/cosign,target=/usr/bin/cosign \
|
--mount=type=bind,from=cosign,source=/ko-app/cosign,target=/usr/bin/cosign \
|
||||||
--mount=type=secret,id=GITHUB_TOKEN \
|
--mount=type=secret,id=GITHUB_TOKEN,env=GITHUB_TOKEN \
|
||||||
GITHUB_TOKEN=$(cat /run/secrets/GITHUB_TOKEN) yarn run test:coverage --coverageDirectory=/tmp/coverage
|
yarn run test:coverage --coverage.reportsDirectory=/tmp/coverage
|
||||||
|
|
||||||
FROM scratch AS test-coverage
|
FROM scratch AS test-coverage
|
||||||
COPY --from=test /tmp/coverage /
|
COPY --from=test /tmp/coverage /
|
||||||
|
|||||||
@@ -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
68
eslint.config.mjs
Normal 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
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]);
|
||||||
@@ -14,14 +14,14 @@
|
|||||||
# See the License for the specific language governing permissions and
|
# See the License for the specific language governing permissions and
|
||||||
# limitations under the License.
|
# limitations under the License.
|
||||||
|
|
||||||
ARG ADDLICENSE_VERSION="v1.1.1"
|
ARG ADDLICENSE_VERSION="v1.2.0"
|
||||||
ARG ALPINE_VERSION="3.21"
|
ARG ALPINE_VERSION="3.23"
|
||||||
ARG GO_VERSION="1.23"
|
ARG GO_VERSION="1.26"
|
||||||
ARG XX_VERSION="1.6.1"
|
ARG XX_VERSION="1.9.0"
|
||||||
|
|
||||||
ARG LICENSE_HOLDER="actions-toolkit authors"
|
ARG LICENSE_HOLDER="actions-toolkit authors"
|
||||||
ARG LICENSE_TYPE="apache"
|
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
|
FROM --platform=$BUILDPLATFORM tonistiigi/xx:${XX_VERSION} AS xx
|
||||||
|
|
||||||
@@ -52,9 +52,9 @@ ARG LICENSE_TYPE
|
|||||||
ARG LICENSE_FILES
|
ARG LICENSE_FILES
|
||||||
RUN --mount=type=bind,target=.,rw \
|
RUN --mount=type=bind,target=.,rw \
|
||||||
--mount=from=addlicense,source=/out/addlicense,target=/usr/bin/addlicense \
|
--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 && \
|
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
|
FROM scratch AS update
|
||||||
COPY --from=set /out /
|
COPY --from=set /out /
|
||||||
@@ -65,4 +65,4 @@ ARG LICENSE_TYPE
|
|||||||
ARG LICENSE_FILES
|
ARG LICENSE_FILES
|
||||||
RUN --mount=type=bind,target=. \
|
RUN --mount=type=bind,target=. \
|
||||||
--mount=from=addlicense,source=/out/addlicense,target=/usr/bin/addlicense \
|
--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"
|
||||||
|
|||||||
@@ -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
|
|
||||||
};
|
|
||||||
71
package.json
71
package.json
@@ -2,19 +2,16 @@
|
|||||||
"name": "@docker/actions-toolkit",
|
"name": "@docker/actions-toolkit",
|
||||||
"version": "0.0.0+unknown",
|
"version": "0.0.0+unknown",
|
||||||
"description": "Toolkit for Docker (GitHub) Actions",
|
"description": "Toolkit for Docker (GitHub) Actions",
|
||||||
|
"type": "module",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"build": "tsc",
|
"build": "tsc",
|
||||||
"lint": "yarn run prettier && yarn run eslint",
|
"lint": "eslint --max-warnings=0 .",
|
||||||
"format": "yarn run prettier:fix && yarn run eslint:fix",
|
"format": "eslint --fix .",
|
||||||
"eslint": "eslint --max-warnings=0 .",
|
"test": "vitest run -c vitest.config.ts",
|
||||||
"eslint:fix": "eslint --fix .",
|
"test:coverage": "vitest run -c vitest.config.ts --coverage",
|
||||||
"prettier": "prettier --check \"./**/*.ts\"",
|
"test:itg": "vitest run -c vitest.config.itg.ts --maxWorkers=1",
|
||||||
"prettier:fix": "prettier --write \"./**/*.ts\"",
|
"test:itg-list": "node ./__tests__/.setup/list-itg-tests.mjs",
|
||||||
"test": "jest",
|
"test:itg-coverage": "vitest run -c vitest.config.itg.ts --coverage --maxWorkers=1"
|
||||||
"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"
|
|
||||||
},
|
},
|
||||||
"repository": {
|
"repository": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
@@ -45,17 +42,14 @@
|
|||||||
"registry": "https://registry.npmjs.org/"
|
"registry": "https://registry.npmjs.org/"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@actions/artifact": "^5.0.2",
|
"@actions/artifact": "^6.2.0",
|
||||||
"@actions/cache": "^5.0.3",
|
"@actions/cache": "^6.0.0",
|
||||||
"@actions/core": "^2.0.2",
|
"@actions/core": "^3.0.0",
|
||||||
"@actions/exec": "^2.0.0",
|
"@actions/exec": "^3.0.0",
|
||||||
"@actions/github": "^7.0.0",
|
"@actions/github": "^9.0.0",
|
||||||
"@actions/http-client": "^3.0.1",
|
"@actions/http-client": "^4.0.0",
|
||||||
"@actions/io": "^2.0.0",
|
"@actions/io": "^3.0.2",
|
||||||
"@actions/tool-cache": "^3.0.0",
|
"@actions/tool-cache": "^4.0.0",
|
||||||
"@azure/storage-blob": "^12.29.1",
|
|
||||||
"@octokit/core": "^5.2.2",
|
|
||||||
"@octokit/plugin-rest-endpoint-methods": "^10.4.1",
|
|
||||||
"@sigstore/bundle": "^4.0.0",
|
"@sigstore/bundle": "^4.0.0",
|
||||||
"@sigstore/sign": "^4.1.0",
|
"@sigstore/sign": "^4.1.0",
|
||||||
"@sigstore/tuf": "^4.0.1",
|
"@sigstore/tuf": "^4.0.1",
|
||||||
@@ -67,35 +61,30 @@
|
|||||||
"he": "^1.2.0",
|
"he": "^1.2.0",
|
||||||
"js-yaml": "^4.1.1",
|
"js-yaml": "^4.1.1",
|
||||||
"jwt-decode": "^4.0.0",
|
"jwt-decode": "^4.0.0",
|
||||||
"semver": "^7.7.3",
|
"semver": "^7.7.4",
|
||||||
"tar-stream": "^3.1.7",
|
"tar-stream": "^3.1.7",
|
||||||
"tmp": "^0.2.5"
|
"tmp": "^0.2.5"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@eslint/compat": "^2.0.0",
|
"@eslint/js": "^9.39.3",
|
||||||
"@eslint/eslintrc": "^3.3.3",
|
|
||||||
"@eslint/js": "^9.39.2",
|
|
||||||
"@sigstore/rekor-types": "^4.0.0",
|
|
||||||
"@types/gunzip-maybe": "^1.4.3",
|
"@types/gunzip-maybe": "^1.4.3",
|
||||||
"@types/he": "^1.2.3",
|
"@types/he": "^1.2.3",
|
||||||
"@types/js-yaml": "^4.0.9",
|
"@types/js-yaml": "^4.0.9",
|
||||||
"@types/node": "^20.19.27",
|
"@types/node": "^24.11.0",
|
||||||
"@types/semver": "^7.7.1",
|
"@types/semver": "^7.7.1",
|
||||||
"@types/tar-stream": "^3.1.4",
|
"@types/tar-stream": "^3.1.4",
|
||||||
"@types/tmp": "^0.2.6",
|
"@types/tmp": "^0.2.6",
|
||||||
"@typescript-eslint/eslint-plugin": "^8.50.0",
|
"@typescript-eslint/eslint-plugin": "^8.56.1",
|
||||||
"@typescript-eslint/parser": "^8.50.0",
|
"@typescript-eslint/parser": "^8.56.1",
|
||||||
"dotenv": "^17.2.3",
|
"@vitest/coverage-v8": "^4.0.18",
|
||||||
"eslint": "^9.39.2",
|
"@vitest/eslint-plugin": "^1.6.9",
|
||||||
|
"eslint": "^9.39.3",
|
||||||
"eslint-config-prettier": "^10.1.8",
|
"eslint-config-prettier": "^10.1.8",
|
||||||
"eslint-plugin-import": "^2.32.0",
|
"eslint-plugin-prettier": "^5.5.5",
|
||||||
"eslint-plugin-jest": "^29.5.0",
|
"globals": "^17.3.0",
|
||||||
"eslint-plugin-prettier": "^5.5.4",
|
"prettier": "^3.8.1",
|
||||||
"jest": "^30.2.0",
|
"rimraf": "^6.1.3",
|
||||||
"prettier": "^3.7.4",
|
"typescript": "^5.9.3",
|
||||||
"rimraf": "^6.1.2",
|
"vitest": "^4.0.18"
|
||||||
"ts-jest": "^29.4.6",
|
|
||||||
"ts-node": "^10.9.2",
|
|
||||||
"typescript": "^5.9.3"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -17,12 +17,12 @@
|
|||||||
import * as core from '@actions/core';
|
import * as core from '@actions/core';
|
||||||
import * as semver from 'semver';
|
import * as semver from 'semver';
|
||||||
|
|
||||||
import {Buildx} from '../buildx/buildx';
|
import {Buildx} from '../buildx/buildx.js';
|
||||||
import {Builder} from '../buildx/builder';
|
import {Builder} from '../buildx/builder.js';
|
||||||
import {Docker} from '../docker/docker';
|
import {Docker} from '../docker/docker.js';
|
||||||
import {Config} from './config';
|
import {Config} from './config.js';
|
||||||
|
|
||||||
import {BuilderInfo, NodeInfo} from '../types/buildx/builder';
|
import {BuilderInfo, NodeInfo} from '../types/buildx/builder.js';
|
||||||
|
|
||||||
export interface BuildKitOpts {
|
export interface BuildKitOpts {
|
||||||
buildx?: Buildx;
|
buildx?: Buildx;
|
||||||
|
|||||||
@@ -16,7 +16,7 @@
|
|||||||
|
|
||||||
import fs from 'fs';
|
import fs from 'fs';
|
||||||
|
|
||||||
import {Context} from '../context';
|
import {Context} from '../context.js';
|
||||||
|
|
||||||
export class Config {
|
export class Config {
|
||||||
public resolveFromString(s: string): string {
|
public resolveFromString(s: string): string {
|
||||||
|
|||||||
@@ -14,7 +14,7 @@
|
|||||||
* limitations under the License.
|
* 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 {
|
export class Git {
|
||||||
private static protoRegexp = new RegExp('^[a-zA-Z0-9]+://');
|
private static protoRegexp = new RegExp('^[a-zA-Z0-9]+://');
|
||||||
|
|||||||
@@ -18,15 +18,15 @@ import fs from 'fs';
|
|||||||
import path from 'path';
|
import path from 'path';
|
||||||
import {parse} from 'csv-parse/sync';
|
import {parse} from 'csv-parse/sync';
|
||||||
|
|
||||||
import {Buildx} from './buildx';
|
import {Buildx} from './buildx.js';
|
||||||
import {Context} from '../context';
|
import {Context} from '../context.js';
|
||||||
import {Exec} from '../exec';
|
import {Exec} from '../exec.js';
|
||||||
import {Util} from '../util';
|
import {Util} from '../util.js';
|
||||||
|
|
||||||
import {ExecOptions} from '@actions/exec';
|
import {ExecOptions} from '@actions/exec';
|
||||||
import {AttestEntry, BakeDefinition, CacheEntry, ExportEntry, SecretEntry, SSHEntry} from '../types/buildx/bake';
|
import {AttestEntry, BakeDefinition, CacheEntry, ExportEntry, SecretEntry, SSHEntry} from '../types/buildx/bake.js';
|
||||||
import {BuildMetadata} from '../types/buildx/build';
|
import {BuildMetadata} from '../types/buildx/build.js';
|
||||||
import {VertexWarning} from '../types/buildkit/client';
|
import {VertexWarning} from '../types/buildkit/client.js';
|
||||||
|
|
||||||
export interface BakeOpts {
|
export interface BakeOpts {
|
||||||
buildx?: Buildx;
|
buildx?: Buildx;
|
||||||
|
|||||||
@@ -19,14 +19,14 @@ import path from 'path';
|
|||||||
import * as core from '@actions/core';
|
import * as core from '@actions/core';
|
||||||
import {parse} from 'csv-parse/sync';
|
import {parse} from 'csv-parse/sync';
|
||||||
|
|
||||||
import {Buildx} from './buildx';
|
import {Buildx} from './buildx.js';
|
||||||
import {Context} from '../context';
|
import {Context} from '../context.js';
|
||||||
import {GitHub} from '../github';
|
import {GitHub} from '../github/github.js';
|
||||||
import {Util} from '../util';
|
import {Util} from '../util.js';
|
||||||
|
|
||||||
import {BuildMetadata} from '../types/buildx/build';
|
import {BuildMetadata} from '../types/buildx/build.js';
|
||||||
import {VertexWarning} from '../types/buildkit/client';
|
import {VertexWarning} from '../types/buildkit/client.js';
|
||||||
import {ProvenancePredicate} from '../types/intoto/slsa_provenance/v0.2/provenance';
|
import {ProvenancePredicate} from '../types/intoto/slsa_provenance/v0.2/provenance.js';
|
||||||
|
|
||||||
export interface BuildOpts {
|
export interface BuildOpts {
|
||||||
buildx?: Buildx;
|
buildx?: Buildx;
|
||||||
@@ -310,9 +310,11 @@ export class Build {
|
|||||||
return res.join(',');
|
return res.join(',');
|
||||||
}
|
}
|
||||||
|
|
||||||
public static hasGitAuthTokenSecret(secrets: string[]): boolean {
|
public static hasGitAuthTokenSecret(secrets: string[], domain?: string): boolean {
|
||||||
for (const secret of secrets) {
|
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;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,10 +16,10 @@
|
|||||||
|
|
||||||
import * as core from '@actions/core';
|
import * as core from '@actions/core';
|
||||||
|
|
||||||
import {Buildx} from './buildx';
|
import {Buildx} from './buildx.js';
|
||||||
import {Exec} from '../exec';
|
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 {
|
export interface BuilderOpts {
|
||||||
buildx?: Buildx;
|
buildx?: Buildx;
|
||||||
|
|||||||
@@ -19,16 +19,16 @@ import path from 'path';
|
|||||||
import * as core from '@actions/core';
|
import * as core from '@actions/core';
|
||||||
import * as semver from 'semver';
|
import * as semver from 'semver';
|
||||||
|
|
||||||
import {Git} from '../buildkit/git';
|
import {Git} from '../buildkit/git.js';
|
||||||
import {Docker} from '../docker/docker';
|
import {Docker} from '../docker/docker.js';
|
||||||
import {GitHub} from '../github';
|
import {GitHub} from '../github/github.js';
|
||||||
import {Exec} from '../exec';
|
import {Exec} from '../exec.js';
|
||||||
import {Util} from '../util';
|
import {Util} from '../util.js';
|
||||||
|
|
||||||
import {VertexWarning} from '../types/buildkit/client';
|
import {VertexWarning} from '../types/buildkit/client.js';
|
||||||
import {GitURL} from '../types/buildkit/git';
|
import {GitURL} from '../types/buildkit/git.js';
|
||||||
import {Cert, LocalRefsOpts, LocalRefsResponse, LocalState} from '../types/buildx/buildx';
|
import {Cert, LocalRefsOpts, LocalRefsResponse, LocalState} from '../types/buildx/buildx.js';
|
||||||
import {GitHubAnnotation} from '../types/github';
|
import {GitHubAnnotation} from '../types/github/github.js';
|
||||||
|
|
||||||
export interface BuildxOpts {
|
export interface BuildxOpts {
|
||||||
standalone?: boolean;
|
standalone?: boolean;
|
||||||
|
|||||||
@@ -14,21 +14,17 @@
|
|||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import {ChildProcessByStdio, spawn} from 'child_process';
|
|
||||||
import fs from 'fs';
|
import fs from 'fs';
|
||||||
import os from 'os';
|
|
||||||
import path from 'path';
|
import path from 'path';
|
||||||
import {Readable, Writable} from 'stream';
|
|
||||||
import * as core from '@actions/core';
|
import * as core from '@actions/core';
|
||||||
|
|
||||||
import {Buildx} from './buildx';
|
import {Buildx} from './buildx.js';
|
||||||
import {Context} from '../context';
|
import {Context} from '../context.js';
|
||||||
import {Docker} from '../docker/docker';
|
import {Exec} from '../exec.js';
|
||||||
import {Exec} from '../exec';
|
import {GitHub} from '../github/github.js';
|
||||||
import {GitHub} from '../github';
|
import {Util} from '../util.js';
|
||||||
import {Util} from '../util';
|
|
||||||
|
|
||||||
import {ExportOpts, ExportResponse, InspectOpts, InspectResponse, Summaries} from '../types/buildx/history';
|
import {ExportOpts, ExportResponse, InspectOpts, InspectResponse, Summaries} from '../types/buildx/history.js';
|
||||||
|
|
||||||
export interface HistoryOpts {
|
export interface HistoryOpts {
|
||||||
buildx?: Buildx;
|
buildx?: Buildx;
|
||||||
@@ -101,10 +97,6 @@ export class History {
|
|||||||
core.info(`exporting build record to ${outDir}`);
|
core.info(`exporting build record to ${outDir}`);
|
||||||
fs.mkdirSync(outDir, {recursive: true});
|
fs.mkdirSync(outDir, {recursive: true});
|
||||||
|
|
||||||
if (opts.useContainer || (await this.buildx.versionSatisfies('<0.23.0'))) {
|
|
||||||
return await this.exportLegacy(builderName, nodeName, refs, outDir, opts.image);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (await this.buildx.versionSatisfies('<0.24.0')) {
|
if (await this.buildx.versionSatisfies('<0.24.0')) {
|
||||||
// wait 3 seconds to ensure build records are finalized: https://github.com/moby/buildkit/pull/5109
|
// wait 3 seconds to ensure build records are finalized: https://github.com/moby/buildkit/pull/5109
|
||||||
// not necessary since buildx 0.24.0: https://github.com/docker/buildx/pull/3152
|
// not necessary since buildx 0.24.0: https://github.com/docker/buildx/pull/3152
|
||||||
@@ -162,143 +154,6 @@ export class History {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
private async exportLegacy(builderName: string, nodeName: string, refs: Array<string>, outDir: string, image?: string): Promise<ExportResponse> {
|
|
||||||
if (os.platform() === 'win32') {
|
|
||||||
throw new Error('Exporting a build record is currently not supported on Windows');
|
|
||||||
}
|
|
||||||
if (!(await Docker.isAvailable())) {
|
|
||||||
throw new Error('Docker is required to export a build record');
|
|
||||||
}
|
|
||||||
if (!(await Docker.isDaemonRunning())) {
|
|
||||||
throw new Error('Docker daemon needs to be running to export a build record');
|
|
||||||
}
|
|
||||||
if (!(await this.buildx.versionSatisfies('>=0.13.0'))) {
|
|
||||||
throw new Error('Buildx >= 0.13.0 is required to export a build record');
|
|
||||||
}
|
|
||||||
|
|
||||||
// wait 3 seconds to ensure build records are finalized: https://github.com/moby/buildkit/pull/5109
|
|
||||||
await Util.sleep(3);
|
|
||||||
|
|
||||||
const buildxInFifoPath = Context.tmpName({
|
|
||||||
template: 'buildx-in-XXXXXX.fifo',
|
|
||||||
tmpdir: Context.tmpDir()
|
|
||||||
});
|
|
||||||
await Exec.exec('mkfifo', [buildxInFifoPath]);
|
|
||||||
|
|
||||||
const buildxOutFifoPath = Context.tmpName({
|
|
||||||
template: 'buildx-out-XXXXXX.fifo',
|
|
||||||
tmpdir: Context.tmpDir()
|
|
||||||
});
|
|
||||||
await Exec.exec('mkfifo', [buildxOutFifoPath]);
|
|
||||||
|
|
||||||
const buildxDialStdioCmd = await this.buildx.getCommand(['--builder', builderName, 'dial-stdio']);
|
|
||||||
core.info(`[command]${buildxDialStdioCmd.command} ${buildxDialStdioCmd.args.join(' ')}`);
|
|
||||||
const buildxDialStdioProc = spawn(buildxDialStdioCmd.command, buildxDialStdioCmd.args, {
|
|
||||||
stdio: ['pipe', 'pipe', 'inherit'],
|
|
||||||
detached: true
|
|
||||||
});
|
|
||||||
let buildxDialStdioKilled = false;
|
|
||||||
fs.createReadStream(buildxInFifoPath).pipe(buildxDialStdioProc.stdin);
|
|
||||||
buildxDialStdioProc.stdout.pipe(fs.createWriteStream(buildxOutFifoPath));
|
|
||||||
buildxDialStdioProc.on('exit', (code, signal) => {
|
|
||||||
buildxDialStdioKilled = true;
|
|
||||||
if (signal) {
|
|
||||||
core.info(`Process "buildx dial-stdio" was killed with signal ${signal}`);
|
|
||||||
} else {
|
|
||||||
core.info(`Process "buildx dial-stdio" exited with code ${code}`);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
const tmpDockerbuildFilename = path.join(outDir, 'rec.dockerbuild');
|
|
||||||
const summaryFilename = path.join(outDir, 'summary.json');
|
|
||||||
|
|
||||||
let dockerRunProc: ChildProcessByStdio<Writable, Readable, null> | undefined;
|
|
||||||
let dockerRunProcKilled = false;
|
|
||||||
await new Promise<void>((resolve, reject) => {
|
|
||||||
const ebargs: Array<string> = ['--ref-state-dir=/buildx-refs', `--node=${builderName}/${nodeName}`];
|
|
||||||
for (const ref of refs) {
|
|
||||||
ebargs.push(`--ref=${ref}`);
|
|
||||||
}
|
|
||||||
if (typeof process.getuid === 'function') {
|
|
||||||
ebargs.push(`--uid=${process.getuid()}`);
|
|
||||||
}
|
|
||||||
if (typeof process.getgid === 'function') {
|
|
||||||
ebargs.push(`--gid=${process.getgid()}`);
|
|
||||||
}
|
|
||||||
// prettier-ignore
|
|
||||||
const dockerRunArgs = [
|
|
||||||
'run', '--rm', '-i',
|
|
||||||
'-v', `${Buildx.refsDir}:/buildx-refs`,
|
|
||||||
'-v', `${outDir}:/out`,
|
|
||||||
image || process.env['DOCKER_BUILD_EXPORT_BUILD_IMAGE'] || 'docker.io/dockereng/export-build:latest',
|
|
||||||
...ebargs
|
|
||||||
]
|
|
||||||
core.info(`[command]docker ${dockerRunArgs.join(' ')}`);
|
|
||||||
dockerRunProc = spawn('docker', dockerRunArgs, {
|
|
||||||
stdio: ['pipe', 'pipe', 'inherit'],
|
|
||||||
env: {
|
|
||||||
...process.env,
|
|
||||||
DOCKER_CONTENT_TRUST: 'false'
|
|
||||||
}
|
|
||||||
});
|
|
||||||
fs.createReadStream(buildxOutFifoPath).pipe(dockerRunProc.stdin);
|
|
||||||
dockerRunProc.stdout.pipe(fs.createWriteStream(buildxInFifoPath));
|
|
||||||
dockerRunProc.on('close', code => {
|
|
||||||
if (code === 0) {
|
|
||||||
if (!fs.existsSync(tmpDockerbuildFilename)) {
|
|
||||||
reject(new Error(`Failed to export build record: ${tmpDockerbuildFilename} not found`));
|
|
||||||
} else {
|
|
||||||
resolve();
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
reject(new Error(`Process "docker run" closed with code ${code}`));
|
|
||||||
}
|
|
||||||
});
|
|
||||||
dockerRunProc.on('error', err => {
|
|
||||||
core.error(`Error executing "docker run": ${err}`);
|
|
||||||
reject(err);
|
|
||||||
});
|
|
||||||
dockerRunProc.on('exit', (code, signal) => {
|
|
||||||
dockerRunProcKilled = true;
|
|
||||||
if (signal) {
|
|
||||||
core.info(`Process "docker run" was killed with signal ${signal}`);
|
|
||||||
} else {
|
|
||||||
core.info(`Process "docker run" exited with code ${code}`);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
})
|
|
||||||
.catch(err => {
|
|
||||||
throw err;
|
|
||||||
})
|
|
||||||
.finally(() => {
|
|
||||||
if (buildxDialStdioProc && !buildxDialStdioKilled) {
|
|
||||||
core.debug('Force terminating "buildx dial-stdio" process');
|
|
||||||
buildxDialStdioProc.kill('SIGKILL');
|
|
||||||
}
|
|
||||||
if (dockerRunProc && !dockerRunProcKilled) {
|
|
||||||
core.debug('Force terminating "docker run" process');
|
|
||||||
dockerRunProc.kill('SIGKILL');
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
const dockerbuildPath = path.join(outDir, `${History.exportFilename(refs)}.dockerbuild`);
|
|
||||||
fs.renameSync(tmpDockerbuildFilename, dockerbuildPath);
|
|
||||||
const dockerbuildStats = fs.statSync(dockerbuildPath);
|
|
||||||
|
|
||||||
core.info(`Parsing ${summaryFilename}`);
|
|
||||||
fs.statSync(summaryFilename);
|
|
||||||
const summaries = <Summaries>JSON.parse(fs.readFileSync(summaryFilename, {encoding: 'utf-8'}));
|
|
||||||
|
|
||||||
return {
|
|
||||||
dockerbuildFilename: dockerbuildPath,
|
|
||||||
dockerbuildSize: dockerbuildStats.size,
|
|
||||||
builderName: builderName,
|
|
||||||
nodeName: nodeName,
|
|
||||||
refs: refs,
|
|
||||||
summaries: summaries
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
private static exportFilename(refs: Array<string>): string {
|
private static exportFilename(refs: Array<string>): string {
|
||||||
let name = `${GitHub.context.repo.owner}~${GitHub.context.repo.repo}~${refs[0].substring(0, 6).toUpperCase()}`;
|
let name = `${GitHub.context.repo.owner}~${GitHub.context.repo.repo}~${refs[0].substring(0, 6).toUpperCase()}`;
|
||||||
if (refs.length > 1) {
|
if (refs.length > 1) {
|
||||||
|
|||||||
@@ -14,13 +14,13 @@
|
|||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import {Buildx} from './buildx';
|
import {Buildx} from './buildx.js';
|
||||||
import {Exec} from '../exec';
|
import {Exec} from '../exec.js';
|
||||||
|
|
||||||
import {Manifest as ImageToolsManifest} from '../types/buildx/imagetools';
|
import {Manifest as ImageToolsManifest} from '../types/buildx/imagetools.js';
|
||||||
import {Image} from '../types/oci/config';
|
import {Image} from '../types/oci/config.js';
|
||||||
import {Descriptor, Platform} from '../types/oci/descriptor';
|
import {Descriptor, Platform} from '../types/oci/descriptor.js';
|
||||||
import {Digest} from '../types/oci/digest';
|
import {Digest} from '../types/oci/digest.js';
|
||||||
|
|
||||||
export interface ImageToolsOpts {
|
export interface ImageToolsOpts {
|
||||||
buildx?: Buildx;
|
buildx?: Buildx;
|
||||||
|
|||||||
@@ -18,34 +18,48 @@ import fs from 'fs';
|
|||||||
import os from 'os';
|
import os from 'os';
|
||||||
import path from 'path';
|
import path from 'path';
|
||||||
import * as core from '@actions/core';
|
import * as core from '@actions/core';
|
||||||
|
import * as httpm from '@actions/http-client';
|
||||||
import * as tc from '@actions/tool-cache';
|
import * as tc from '@actions/tool-cache';
|
||||||
import * as semver from 'semver';
|
import * as semver from 'semver';
|
||||||
import * as util from 'util';
|
import * as util from 'util';
|
||||||
|
|
||||||
import {Buildx} from './buildx';
|
import {Buildx} from './buildx.js';
|
||||||
import {Cache} from '../cache';
|
import {Cache} from '../cache.js';
|
||||||
import {Context} from '../context';
|
import {Context} from '../context.js';
|
||||||
import {Exec} from '../exec';
|
import {Exec} from '../exec.js';
|
||||||
import {Docker} from '../docker/docker';
|
import {Docker} from '../docker/docker.js';
|
||||||
import {Git} from '../git';
|
import {Git} from '../git.js';
|
||||||
import {GitHub} from '../github';
|
import {GitHub} from '../github/github.js';
|
||||||
import {Util} from '../util';
|
import {Sigstore} from '../sigstore/sigstore.js';
|
||||||
|
import {Util} from '../util.js';
|
||||||
|
|
||||||
import {DownloadVersion} from '../types/buildx/buildx';
|
import {DownloadVersion} from '../types/buildx/buildx.js';
|
||||||
import {GitHubRelease} from '../types/github';
|
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 {
|
export interface InstallOpts {
|
||||||
standalone?: boolean;
|
standalone?: boolean;
|
||||||
githubToken?: string;
|
githubToken?: string;
|
||||||
|
sigstore?: Sigstore;
|
||||||
}
|
}
|
||||||
|
|
||||||
export class Install {
|
export class Install {
|
||||||
private readonly standalone: boolean | undefined;
|
private readonly standalone: boolean | undefined;
|
||||||
private readonly githubToken: string | undefined;
|
private readonly githubToken: string | undefined;
|
||||||
|
private readonly sigstore: Sigstore;
|
||||||
|
|
||||||
constructor(opts?: InstallOpts) {
|
constructor(opts?: InstallOpts) {
|
||||||
this.standalone = opts?.standalone;
|
this.standalone = opts?.standalone;
|
||||||
this.githubToken = opts?.githubToken || process.env.GITHUB_TOKEN;
|
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
|
* @param ghaNoCache: disable binary caching in GitHub Actions cache backend
|
||||||
* @returns path to the buildx binary
|
* @returns path to the buildx binary
|
||||||
*/
|
*/
|
||||||
public async download(v: string, ghaNoCache?: boolean): Promise<string> {
|
public async download(opts: DownloadOpts): Promise<string> {
|
||||||
const version: DownloadVersion = await Install.getDownloadVersion(v);
|
const version: DownloadVersion = await Install.getDownloadVersion(opts.version);
|
||||||
core.debug(`Install.download version: ${version.version}`);
|
core.debug(`Install.download version: ${version.version}`);
|
||||||
|
|
||||||
const release: GitHubRelease = await Install.getRelease(version, this.githubToken);
|
const release: GitHubRelease = await Install.getRelease(version, this.githubToken);
|
||||||
@@ -74,11 +88,11 @@ export class Install {
|
|||||||
htcVersion: vspec,
|
htcVersion: vspec,
|
||||||
baseCacheDir: path.join(Buildx.configDir, '.bin'),
|
baseCacheDir: path.join(Buildx.configDir, '.bin'),
|
||||||
cacheFile: os.platform() == 'win32' ? 'docker-buildx.exe' : 'docker-buildx',
|
cacheFile: os.platform() == 'win32' ? 'docker-buildx.exe' : 'docker-buildx',
|
||||||
ghaNoCache: ghaNoCache
|
ghaNoCache: opts.ghaNoCache
|
||||||
});
|
});
|
||||||
|
|
||||||
const cacheFoundPath = await installCache.find();
|
const cacheFoundPath = await installCache.find();
|
||||||
if (cacheFoundPath) {
|
if (!opts.disableHtc && cacheFoundPath) {
|
||||||
core.info(`Buildx binary found in ${cacheFoundPath}`);
|
core.info(`Buildx binary found in ${cacheFoundPath}`);
|
||||||
return cacheFoundPath;
|
return cacheFoundPath;
|
||||||
}
|
}
|
||||||
@@ -89,7 +103,11 @@ export class Install {
|
|||||||
const htcDownloadPath = await tc.downloadTool(downloadURL, undefined, this.githubToken);
|
const htcDownloadPath = await tc.downloadTool(downloadURL, undefined, this.githubToken);
|
||||||
core.debug(`Install.download htcDownloadPath: ${htcDownloadPath}`);
|
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}`);
|
core.info(`Cached to ${cacheSavePath}`);
|
||||||
return cacheSavePath;
|
return cacheSavePath;
|
||||||
}
|
}
|
||||||
@@ -213,6 +231,31 @@ export class Install {
|
|||||||
return standalone;
|
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 {
|
private filename(version: string): string {
|
||||||
let arch: string;
|
let arch: string;
|
||||||
switch (os.arch()) {
|
switch (os.arch()) {
|
||||||
|
|||||||
@@ -16,8 +16,8 @@
|
|||||||
|
|
||||||
import * as core from '@actions/core';
|
import * as core from '@actions/core';
|
||||||
|
|
||||||
import {Docker} from '../docker/docker';
|
import {Docker} from '../docker/docker.js';
|
||||||
import {Exec} from '../exec';
|
import {Exec} from '../exec.js';
|
||||||
|
|
||||||
export interface ComposeOpts {
|
export interface ComposeOpts {
|
||||||
standalone?: boolean;
|
standalone?: boolean;
|
||||||
|
|||||||
@@ -22,13 +22,13 @@ import * as tc from '@actions/tool-cache';
|
|||||||
import * as semver from 'semver';
|
import * as semver from 'semver';
|
||||||
import * as util from 'util';
|
import * as util from 'util';
|
||||||
|
|
||||||
import {Cache} from '../cache';
|
import {Cache} from '../cache.js';
|
||||||
import {Context} from '../context';
|
import {Context} from '../context.js';
|
||||||
import {Docker} from '../docker/docker';
|
import {Docker} from '../docker/docker.js';
|
||||||
import {GitHub} from '../github';
|
import {GitHub} from '../github/github.js';
|
||||||
|
|
||||||
import {DownloadVersion} from '../types/compose/compose';
|
import {DownloadVersion} from '../types/compose/compose.js';
|
||||||
import {GitHubRelease} from '../types/github';
|
import {GitHubRelease} from '../types/github/github.js';
|
||||||
|
|
||||||
export interface InstallOpts {
|
export interface InstallOpts {
|
||||||
standalone?: boolean;
|
standalone?: boolean;
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ import path from 'path';
|
|||||||
import * as tmp from 'tmp';
|
import * as tmp from 'tmp';
|
||||||
import * as github from '@actions/github';
|
import * as github from '@actions/github';
|
||||||
|
|
||||||
import {GitHub} from './github';
|
import {GitHub} from './github/github.js';
|
||||||
|
|
||||||
export class Context {
|
export class Context {
|
||||||
private static readonly _tmpDir = fs.mkdtempSync(path.join(Context.ensureDirExists(process.env.RUNNER_TEMP || os.tmpdir()), 'docker-actions-toolkit-'));
|
private static readonly _tmpDir = fs.mkdtempSync(path.join(Context.ensureDirExists(process.env.RUNNER_TEMP || os.tmpdir()), 'docker-actions-toolkit-'));
|
||||||
|
|||||||
@@ -17,9 +17,9 @@
|
|||||||
import * as core from '@actions/core';
|
import * as core from '@actions/core';
|
||||||
import {BUNDLE_V03_MEDIA_TYPE, SerializedBundle} from '@sigstore/bundle';
|
import {BUNDLE_V03_MEDIA_TYPE, SerializedBundle} from '@sigstore/bundle';
|
||||||
|
|
||||||
import {Exec} from '../exec';
|
import {Exec} from '../exec.js';
|
||||||
import * as semver from 'semver';
|
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 {
|
export interface CosignOpts {
|
||||||
binPath?: string;
|
binPath?: string;
|
||||||
|
|||||||
@@ -19,23 +19,22 @@ import os from 'os';
|
|||||||
import path from 'path';
|
import path from 'path';
|
||||||
import * as core from '@actions/core';
|
import * as core from '@actions/core';
|
||||||
import * as tc from '@actions/tool-cache';
|
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 semver from 'semver';
|
||||||
import * as util from 'util';
|
import * as util from 'util';
|
||||||
|
|
||||||
import {Buildx} from '../buildx/buildx';
|
import {Buildx} from '../buildx/buildx.js';
|
||||||
import {Cache} from '../cache';
|
import {Cache} from '../cache.js';
|
||||||
import {Context} from '../context';
|
import {Context} from '../context.js';
|
||||||
import {Exec} from '../exec';
|
import {Exec} from '../exec.js';
|
||||||
import {Git} from '../git';
|
import {Git} from '../git.js';
|
||||||
import {GitHub} from '../github';
|
import {GitHub} from '../github/github.js';
|
||||||
import {Util} from '../util';
|
import {Sigstore} from '../sigstore/sigstore.js';
|
||||||
|
import {Util} from '../util.js';
|
||||||
|
|
||||||
import {DownloadVersion} from '../types/cosign/cosign';
|
import {DownloadVersion} from '../types/cosign/cosign.js';
|
||||||
import {GitHubRelease} from '../types/github';
|
import {GitHubRelease} from '../types/github/github.js';
|
||||||
import {dockerfileContent} from './dockerfile';
|
import {dockerfileContent} from './dockerfile.js';
|
||||||
|
import {SEARCH_URL} from '../types/sigstore/sigstore.js';
|
||||||
|
|
||||||
export interface DownloadOpts {
|
export interface DownloadOpts {
|
||||||
version: string;
|
version: string;
|
||||||
@@ -47,15 +46,18 @@ export interface DownloadOpts {
|
|||||||
export interface InstallOpts {
|
export interface InstallOpts {
|
||||||
githubToken?: string;
|
githubToken?: string;
|
||||||
buildx?: Buildx;
|
buildx?: Buildx;
|
||||||
|
sigstore?: Sigstore;
|
||||||
}
|
}
|
||||||
|
|
||||||
export class Install {
|
export class Install {
|
||||||
private readonly githubToken: string | undefined;
|
private readonly githubToken: string | undefined;
|
||||||
private readonly buildx: Buildx;
|
private readonly buildx: Buildx;
|
||||||
|
private readonly sigstore: Sigstore;
|
||||||
|
|
||||||
constructor(opts?: InstallOpts) {
|
constructor(opts?: InstallOpts) {
|
||||||
this.githubToken = opts?.githubToken || process.env.GITHUB_TOKEN;
|
this.githubToken = opts?.githubToken || process.env.GITHUB_TOKEN;
|
||||||
this.buildx = opts?.buildx || new Buildx();
|
this.buildx = opts?.buildx || new Buildx();
|
||||||
|
this.sigstore = opts?.sigstore || new Sigstore();
|
||||||
}
|
}
|
||||||
|
|
||||||
public async download(opts: DownloadOpts): Promise<string> {
|
public async download(opts: DownloadOpts): Promise<string> {
|
||||||
@@ -196,27 +198,12 @@ export class Install {
|
|||||||
const bundlePath = await tc.downloadTool(bundleURL, undefined, this.githubToken);
|
const bundlePath = await tc.downloadTool(bundleURL, undefined, this.githubToken);
|
||||||
core.debug(`Install.verifySignature bundlePath: ${bundlePath}`);
|
core.debug(`Install.verifySignature bundlePath: ${bundlePath}`);
|
||||||
|
|
||||||
core.info(`Verifying keyless verification bundle signature`);
|
const verifyResult = await this.sigstore.verifyArtifact(cosignBinPath, bundlePath, {
|
||||||
const parsedBundle = JSON.parse(fs.readFileSync(bundlePath, 'utf-8')) as SerializedBundle;
|
subjectAlternativeName: 'keyless@projectsigstore.iam.gserviceaccount.com',
|
||||||
const bundle = bundleFromJSON(parsedBundle);
|
issuer: 'https://accounts.google.com'
|
||||||
|
});
|
||||||
|
|
||||||
core.info(`Fetching Sigstore TUF trusted root metadata`);
|
core.info(`Cosign binary signature verified! ${verifyResult.tlogID ? `${SEARCH_URL}?logIndex=${verifyResult.tlogID}` : ''}`);
|
||||||
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}`);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private filename(): string {
|
private filename(): string {
|
||||||
|
|||||||
@@ -15,7 +15,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
import fs from 'fs';
|
import fs from 'fs';
|
||||||
import {Context} from '../context';
|
import {Context} from '../context.js';
|
||||||
|
|
||||||
export const setupDockerWinPs1 = (): string => {
|
export const setupDockerWinPs1 = (): string => {
|
||||||
return get('docker-setup-win.ps1', setupDockerWinPs1Data);
|
return get('docker-setup-win.ps1', setupDockerWinPs1Data);
|
||||||
|
|||||||
@@ -21,12 +21,12 @@ import * as core from '@actions/core';
|
|||||||
import {ExecOptions, ExecOutput} from '@actions/exec';
|
import {ExecOptions, ExecOutput} from '@actions/exec';
|
||||||
import * as io from '@actions/io';
|
import * as io from '@actions/io';
|
||||||
|
|
||||||
import {Context} from '../context';
|
import {Context} from '../context.js';
|
||||||
import {Cache} from '../cache';
|
import {Cache} from '../cache.js';
|
||||||
import {Exec} from '../exec';
|
import {Exec} from '../exec.js';
|
||||||
import {Util} from '../util';
|
import {Util} from '../util.js';
|
||||||
|
|
||||||
import {ConfigFile, ContextInfo} from '../types/docker/docker';
|
import {ConfigFile, ContextInfo} from '../types/docker/docker.js';
|
||||||
|
|
||||||
export class Docker {
|
export class Docker {
|
||||||
static get configDir(): string {
|
static get configDir(): string {
|
||||||
|
|||||||
@@ -25,18 +25,18 @@ import * as core from '@actions/core';
|
|||||||
import * as io from '@actions/io';
|
import * as io from '@actions/io';
|
||||||
import * as tc from '@actions/tool-cache';
|
import * as tc from '@actions/tool-cache';
|
||||||
|
|
||||||
import {Context} from '../context';
|
import {Context} from '../context.js';
|
||||||
import {Docker} from './docker';
|
import {Docker} from './docker.js';
|
||||||
import {Exec} from '../exec';
|
import {Exec} from '../exec.js';
|
||||||
import {GitHub} from '../github';
|
import {GitHub} from '../github/github.js';
|
||||||
import {Regctl} from '../regclient/regctl';
|
import {Regctl} from '../regclient/regctl.js';
|
||||||
import {Undock} from '../undock/undock';
|
import {Undock} from '../undock/undock.js';
|
||||||
import {Util} from '../util';
|
import {Util} from '../util.js';
|
||||||
|
|
||||||
import {limaYamlData, dockerServiceLogsPs1, setupDockerWinPs1} from './assets';
|
import {limaYamlData, dockerServiceLogsPs1, setupDockerWinPs1} from './assets.js';
|
||||||
|
|
||||||
import {GitHubRelease} from '../types/github';
|
import {GitHubRelease} from '../types/github/github.js';
|
||||||
import {Image} from '../types/oci/config';
|
import {Image} from '../types/oci/config.js';
|
||||||
|
|
||||||
export interface InstallSourceImage {
|
export interface InstallSourceImage {
|
||||||
type: 'image';
|
type: 'image';
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ import * as core from '@actions/core';
|
|||||||
import * as httpm from '@actions/http-client';
|
import * as httpm from '@actions/http-client';
|
||||||
import {HttpCodes} 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 {
|
export interface DockerHubOpts {
|
||||||
credentials: TokenRequest;
|
credentials: TokenRequest;
|
||||||
|
|||||||
17
src/git.ts
17
src/git.ts
@@ -15,18 +15,15 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
import * as core from '@actions/core';
|
import * as core from '@actions/core';
|
||||||
import {Octokit} from '@octokit/core';
|
import * as github from '@actions/github';
|
||||||
import {restEndpointMethods} from '@octokit/plugin-rest-endpoint-methods';
|
import {Exec} from './exec.js';
|
||||||
|
import {GitHub} from './github/github.js';
|
||||||
|
|
||||||
import {Exec} from './exec';
|
export type GitContext = typeof github.context;
|
||||||
import {GitHub} from './github';
|
|
||||||
import {Context} from '@actions/github/lib/context';
|
|
||||||
|
|
||||||
import {Context as GitContext} from './types/git';
|
|
||||||
|
|
||||||
export class Git {
|
export class Git {
|
||||||
public static async context(): Promise<GitContext> {
|
public static async context(): Promise<GitContext> {
|
||||||
const ctx = new Context();
|
const ctx = {...github.context} as GitContext;
|
||||||
ctx.ref = await Git.ref();
|
ctx.ref = await Git.ref();
|
||||||
ctx.sha = await Git.fullCommit();
|
ctx.sha = await Git.fullCommit();
|
||||||
return ctx;
|
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 we have a token and this is a GitHub repo we can use the GitHub API
|
||||||
if (token && repoMatch) {
|
if (token && repoMatch) {
|
||||||
core.setSecret(token);
|
core.setSecret(token);
|
||||||
const octokit = new (Octokit.plugin(restEndpointMethods).defaults({
|
const octokit = github.getOctokit(token, {
|
||||||
baseUrl: GitHub.apiURL
|
baseUrl: GitHub.apiURL
|
||||||
}))({auth: token});
|
});
|
||||||
const [owner, repoName] = repoMatch.slice(1, 3);
|
const [owner, repoName] = repoMatch.slice(1, 3);
|
||||||
try {
|
try {
|
||||||
return (
|
return (
|
||||||
|
|||||||
416
src/github.ts
416
src/github.ts
@@ -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
56
src/github/artifact.ts
Normal 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
154
src/github/github.ts
Normal 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}`);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user