Compare commits
61 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
7bd4fed6bc | ||
|
|
18fbe0cb64 | ||
|
|
7360d08bf9 | ||
|
|
644587f0d1 | ||
|
|
3a7b0a6080 | ||
|
|
2e70a0cac6 | ||
|
|
e600fe266c | ||
|
|
52d663521a | ||
|
|
dceb603792 | ||
|
|
77b8d647eb | ||
|
|
630b180101 | ||
|
|
2e536e4a37 | ||
|
|
40f2a14d95 | ||
|
|
9853314413 | ||
|
|
f2e65ab473 | ||
|
|
e130c40c84 | ||
|
|
bbf0a8d268 | ||
|
|
4ce8a708c9 | ||
|
|
6f66565779 | ||
|
|
504af69bd9 | ||
|
|
f3734ee134 | ||
|
|
4183444df2 | ||
|
|
a5466523c1 | ||
|
|
e0007fb5cd | ||
|
|
c330895cef | ||
|
|
e7017a21b8 | ||
|
|
b56d9771d7 | ||
|
|
680ab5bdf1 | ||
|
|
5ea53e0090 | ||
|
|
b5ae9ccb69 | ||
|
|
8c81eef9ff | ||
|
|
6668cc52b7 | ||
|
|
58b2ef7640 | ||
|
|
d791e46ccd | ||
|
|
1cb547a599 | ||
|
|
b61fc5ff9c | ||
|
|
eb3bf3055e | ||
|
|
6c6fdffd44 | ||
|
|
edcf239f49 | ||
|
|
e26a82d0aa | ||
|
|
3162c096bd | ||
|
|
0da8b903ef | ||
|
|
953dc3bb00 | ||
|
|
f27d52d6b7 | ||
|
|
5c3fc146af | ||
|
|
ef2bd7607f | ||
|
|
6352d92e3f | ||
|
|
a39cb53a8a | ||
|
|
9b811fbceb | ||
|
|
7b876a9e95 | ||
|
|
fd2f683a14 | ||
|
|
5205f4197c | ||
|
|
c76674dd4a | ||
|
|
8471422135 | ||
|
|
e266e3e984 | ||
|
|
1b7201d572 | ||
|
|
6983a397f4 | ||
|
|
81e959d041 | ||
|
|
475cefa34e | ||
|
|
c14688a151 | ||
|
|
dde9860104 |
156
.github/buildx-lab-releases.json
vendored
156
.github/buildx-lab-releases.json
vendored
@@ -1,43 +1,125 @@
|
||||
{
|
||||
"latest": {
|
||||
"id": 155523887,
|
||||
"tag_name": "v0.14.0-desktop.1",
|
||||
"html_url": "https://github.com/docker/buildx-desktop/releases/tag/v0.14.0-desktop.1",
|
||||
"id": 157588052,
|
||||
"tag_name": "v0.14.1-desktop.1",
|
||||
"html_url": "https://github.com/docker/buildx-desktop/releases/tag/v0.14.1-desktop.1",
|
||||
"assets": [
|
||||
"https://github.com/docker/buildx-desktop/releases/download/v0.14.0-desktop.1/buildx-v0.14.0-desktop.1.darwin-amd64",
|
||||
"https://github.com/docker/buildx-desktop/releases/download/v0.14.0-desktop.1/buildx-v0.14.0-desktop.1.darwin-amd64.provenance.json",
|
||||
"https://github.com/docker/buildx-desktop/releases/download/v0.14.0-desktop.1/buildx-v0.14.0-desktop.1.darwin-amd64.sbom.json",
|
||||
"https://github.com/docker/buildx-desktop/releases/download/v0.14.0-desktop.1/buildx-v0.14.0-desktop.1.darwin-arm64",
|
||||
"https://github.com/docker/buildx-desktop/releases/download/v0.14.0-desktop.1/buildx-v0.14.0-desktop.1.darwin-arm64.provenance.json",
|
||||
"https://github.com/docker/buildx-desktop/releases/download/v0.14.0-desktop.1/buildx-v0.14.0-desktop.1.darwin-arm64.sbom.json",
|
||||
"https://github.com/docker/buildx-desktop/releases/download/v0.14.0-desktop.1/buildx-v0.14.0-desktop.1.linux-amd64",
|
||||
"https://github.com/docker/buildx-desktop/releases/download/v0.14.0-desktop.1/buildx-v0.14.0-desktop.1.linux-amd64.provenance.json",
|
||||
"https://github.com/docker/buildx-desktop/releases/download/v0.14.0-desktop.1/buildx-v0.14.0-desktop.1.linux-amd64.sbom.json",
|
||||
"https://github.com/docker/buildx-desktop/releases/download/v0.14.0-desktop.1/buildx-v0.14.0-desktop.1.linux-arm-v6",
|
||||
"https://github.com/docker/buildx-desktop/releases/download/v0.14.0-desktop.1/buildx-v0.14.0-desktop.1.linux-arm-v6.provenance.json",
|
||||
"https://github.com/docker/buildx-desktop/releases/download/v0.14.0-desktop.1/buildx-v0.14.0-desktop.1.linux-arm-v6.sbom.json",
|
||||
"https://github.com/docker/buildx-desktop/releases/download/v0.14.0-desktop.1/buildx-v0.14.0-desktop.1.linux-arm-v7",
|
||||
"https://github.com/docker/buildx-desktop/releases/download/v0.14.0-desktop.1/buildx-v0.14.0-desktop.1.linux-arm-v7.provenance.json",
|
||||
"https://github.com/docker/buildx-desktop/releases/download/v0.14.0-desktop.1/buildx-v0.14.0-desktop.1.linux-arm-v7.sbom.json",
|
||||
"https://github.com/docker/buildx-desktop/releases/download/v0.14.0-desktop.1/buildx-v0.14.0-desktop.1.linux-arm64",
|
||||
"https://github.com/docker/buildx-desktop/releases/download/v0.14.0-desktop.1/buildx-v0.14.0-desktop.1.linux-arm64.provenance.json",
|
||||
"https://github.com/docker/buildx-desktop/releases/download/v0.14.0-desktop.1/buildx-v0.14.0-desktop.1.linux-arm64.sbom.json",
|
||||
"https://github.com/docker/buildx-desktop/releases/download/v0.14.0-desktop.1/buildx-v0.14.0-desktop.1.linux-ppc64le",
|
||||
"https://github.com/docker/buildx-desktop/releases/download/v0.14.0-desktop.1/buildx-v0.14.0-desktop.1.linux-ppc64le.provenance.json",
|
||||
"https://github.com/docker/buildx-desktop/releases/download/v0.14.0-desktop.1/buildx-v0.14.0-desktop.1.linux-ppc64le.sbom.json",
|
||||
"https://github.com/docker/buildx-desktop/releases/download/v0.14.0-desktop.1/buildx-v0.14.0-desktop.1.linux-riscv64",
|
||||
"https://github.com/docker/buildx-desktop/releases/download/v0.14.0-desktop.1/buildx-v0.14.0-desktop.1.linux-riscv64.provenance.json",
|
||||
"https://github.com/docker/buildx-desktop/releases/download/v0.14.0-desktop.1/buildx-v0.14.0-desktop.1.linux-riscv64.sbom.json",
|
||||
"https://github.com/docker/buildx-desktop/releases/download/v0.14.0-desktop.1/buildx-v0.14.0-desktop.1.linux-s390x",
|
||||
"https://github.com/docker/buildx-desktop/releases/download/v0.14.0-desktop.1/buildx-v0.14.0-desktop.1.linux-s390x.provenance.json",
|
||||
"https://github.com/docker/buildx-desktop/releases/download/v0.14.0-desktop.1/buildx-v0.14.0-desktop.1.linux-s390x.sbom.json",
|
||||
"https://github.com/docker/buildx-desktop/releases/download/v0.14.0-desktop.1/buildx-v0.14.0-desktop.1.windows-amd64.exe",
|
||||
"https://github.com/docker/buildx-desktop/releases/download/v0.14.0-desktop.1/buildx-v0.14.0-desktop.1.windows-amd64.provenance.json",
|
||||
"https://github.com/docker/buildx-desktop/releases/download/v0.14.0-desktop.1/buildx-v0.14.0-desktop.1.windows-amd64.sbom.json",
|
||||
"https://github.com/docker/buildx-desktop/releases/download/v0.14.0-desktop.1/buildx-v0.14.0-desktop.1.windows-arm64.exe",
|
||||
"https://github.com/docker/buildx-desktop/releases/download/v0.14.0-desktop.1/buildx-v0.14.0-desktop.1.windows-arm64.provenance.json",
|
||||
"https://github.com/docker/buildx-desktop/releases/download/v0.14.0-desktop.1/buildx-v0.14.0-desktop.1.windows-arm64.sbom.json",
|
||||
"https://github.com/docker/buildx-desktop/releases/download/v0.14.0-desktop.1/checksums.txt"
|
||||
"https://github.com/docker/buildx-desktop/releases/download/v0.14.1-desktop.1/buildx-v0.14.1-desktop.1.darwin-amd64",
|
||||
"https://github.com/docker/buildx-desktop/releases/download/v0.14.1-desktop.1/buildx-v0.14.1-desktop.1.darwin-amd64.provenance.json",
|
||||
"https://github.com/docker/buildx-desktop/releases/download/v0.14.1-desktop.1/buildx-v0.14.1-desktop.1.darwin-amd64.sbom.json",
|
||||
"https://github.com/docker/buildx-desktop/releases/download/v0.14.1-desktop.1/buildx-v0.14.1-desktop.1.darwin-arm64",
|
||||
"https://github.com/docker/buildx-desktop/releases/download/v0.14.1-desktop.1/buildx-v0.14.1-desktop.1.darwin-arm64.provenance.json",
|
||||
"https://github.com/docker/buildx-desktop/releases/download/v0.14.1-desktop.1/buildx-v0.14.1-desktop.1.darwin-arm64.sbom.json",
|
||||
"https://github.com/docker/buildx-desktop/releases/download/v0.14.1-desktop.1/buildx-v0.14.1-desktop.1.linux-amd64",
|
||||
"https://github.com/docker/buildx-desktop/releases/download/v0.14.1-desktop.1/buildx-v0.14.1-desktop.1.linux-amd64.provenance.json",
|
||||
"https://github.com/docker/buildx-desktop/releases/download/v0.14.1-desktop.1/buildx-v0.14.1-desktop.1.linux-amd64.sbom.json",
|
||||
"https://github.com/docker/buildx-desktop/releases/download/v0.14.1-desktop.1/buildx-v0.14.1-desktop.1.linux-arm-v6",
|
||||
"https://github.com/docker/buildx-desktop/releases/download/v0.14.1-desktop.1/buildx-v0.14.1-desktop.1.linux-arm-v6.provenance.json",
|
||||
"https://github.com/docker/buildx-desktop/releases/download/v0.14.1-desktop.1/buildx-v0.14.1-desktop.1.linux-arm-v6.sbom.json",
|
||||
"https://github.com/docker/buildx-desktop/releases/download/v0.14.1-desktop.1/buildx-v0.14.1-desktop.1.linux-arm-v7",
|
||||
"https://github.com/docker/buildx-desktop/releases/download/v0.14.1-desktop.1/buildx-v0.14.1-desktop.1.linux-arm-v7.provenance.json",
|
||||
"https://github.com/docker/buildx-desktop/releases/download/v0.14.1-desktop.1/buildx-v0.14.1-desktop.1.linux-arm-v7.sbom.json",
|
||||
"https://github.com/docker/buildx-desktop/releases/download/v0.14.1-desktop.1/buildx-v0.14.1-desktop.1.linux-arm64",
|
||||
"https://github.com/docker/buildx-desktop/releases/download/v0.14.1-desktop.1/buildx-v0.14.1-desktop.1.linux-arm64.provenance.json",
|
||||
"https://github.com/docker/buildx-desktop/releases/download/v0.14.1-desktop.1/buildx-v0.14.1-desktop.1.linux-arm64.sbom.json",
|
||||
"https://github.com/docker/buildx-desktop/releases/download/v0.14.1-desktop.1/buildx-v0.14.1-desktop.1.linux-ppc64le",
|
||||
"https://github.com/docker/buildx-desktop/releases/download/v0.14.1-desktop.1/buildx-v0.14.1-desktop.1.linux-ppc64le.provenance.json",
|
||||
"https://github.com/docker/buildx-desktop/releases/download/v0.14.1-desktop.1/buildx-v0.14.1-desktop.1.linux-ppc64le.sbom.json",
|
||||
"https://github.com/docker/buildx-desktop/releases/download/v0.14.1-desktop.1/buildx-v0.14.1-desktop.1.linux-riscv64",
|
||||
"https://github.com/docker/buildx-desktop/releases/download/v0.14.1-desktop.1/buildx-v0.14.1-desktop.1.linux-riscv64.provenance.json",
|
||||
"https://github.com/docker/buildx-desktop/releases/download/v0.14.1-desktop.1/buildx-v0.14.1-desktop.1.linux-riscv64.sbom.json",
|
||||
"https://github.com/docker/buildx-desktop/releases/download/v0.14.1-desktop.1/buildx-v0.14.1-desktop.1.linux-s390x",
|
||||
"https://github.com/docker/buildx-desktop/releases/download/v0.14.1-desktop.1/buildx-v0.14.1-desktop.1.linux-s390x.provenance.json",
|
||||
"https://github.com/docker/buildx-desktop/releases/download/v0.14.1-desktop.1/buildx-v0.14.1-desktop.1.linux-s390x.sbom.json",
|
||||
"https://github.com/docker/buildx-desktop/releases/download/v0.14.1-desktop.1/buildx-v0.14.1-desktop.1.windows-amd64.exe",
|
||||
"https://github.com/docker/buildx-desktop/releases/download/v0.14.1-desktop.1/buildx-v0.14.1-desktop.1.windows-amd64.provenance.json",
|
||||
"https://github.com/docker/buildx-desktop/releases/download/v0.14.1-desktop.1/buildx-v0.14.1-desktop.1.windows-amd64.sbom.json",
|
||||
"https://github.com/docker/buildx-desktop/releases/download/v0.14.1-desktop.1/buildx-v0.14.1-desktop.1.windows-arm64.exe",
|
||||
"https://github.com/docker/buildx-desktop/releases/download/v0.14.1-desktop.1/buildx-v0.14.1-desktop.1.windows-arm64.provenance.json",
|
||||
"https://github.com/docker/buildx-desktop/releases/download/v0.14.1-desktop.1/buildx-v0.14.1-desktop.1.windows-arm64.sbom.json",
|
||||
"https://github.com/docker/buildx-desktop/releases/download/v0.14.1-desktop.1/checksums.txt"
|
||||
]
|
||||
},
|
||||
"v0.15.1-desktop.1": {
|
||||
"id": 161492089,
|
||||
"tag_name": "v0.15.1-desktop.1",
|
||||
"html_url": "https://github.com/docker/buildx-desktop/releases/tag/v0.15.1-desktop.1",
|
||||
"assets": [
|
||||
"https://github.com/docker/buildx-desktop/releases/download/v0.15.1-desktop.1/buildx-v0.15.1-desktop.1.darwin-amd64",
|
||||
"https://github.com/docker/buildx-desktop/releases/download/v0.15.1-desktop.1/buildx-v0.15.1-desktop.1.darwin-amd64.provenance.json",
|
||||
"https://github.com/docker/buildx-desktop/releases/download/v0.15.1-desktop.1/buildx-v0.15.1-desktop.1.darwin-amd64.sbom.json",
|
||||
"https://github.com/docker/buildx-desktop/releases/download/v0.15.1-desktop.1/buildx-v0.15.1-desktop.1.darwin-arm64",
|
||||
"https://github.com/docker/buildx-desktop/releases/download/v0.15.1-desktop.1/buildx-v0.15.1-desktop.1.darwin-arm64.provenance.json",
|
||||
"https://github.com/docker/buildx-desktop/releases/download/v0.15.1-desktop.1/buildx-v0.15.1-desktop.1.darwin-arm64.sbom.json",
|
||||
"https://github.com/docker/buildx-desktop/releases/download/v0.15.1-desktop.1/buildx-v0.15.1-desktop.1.linux-amd64",
|
||||
"https://github.com/docker/buildx-desktop/releases/download/v0.15.1-desktop.1/buildx-v0.15.1-desktop.1.linux-amd64.provenance.json",
|
||||
"https://github.com/docker/buildx-desktop/releases/download/v0.15.1-desktop.1/buildx-v0.15.1-desktop.1.linux-amd64.sbom.json",
|
||||
"https://github.com/docker/buildx-desktop/releases/download/v0.15.1-desktop.1/buildx-v0.15.1-desktop.1.linux-arm-v6",
|
||||
"https://github.com/docker/buildx-desktop/releases/download/v0.15.1-desktop.1/buildx-v0.15.1-desktop.1.linux-arm-v6.provenance.json",
|
||||
"https://github.com/docker/buildx-desktop/releases/download/v0.15.1-desktop.1/buildx-v0.15.1-desktop.1.linux-arm-v6.sbom.json",
|
||||
"https://github.com/docker/buildx-desktop/releases/download/v0.15.1-desktop.1/buildx-v0.15.1-desktop.1.linux-arm-v7",
|
||||
"https://github.com/docker/buildx-desktop/releases/download/v0.15.1-desktop.1/buildx-v0.15.1-desktop.1.linux-arm-v7.provenance.json",
|
||||
"https://github.com/docker/buildx-desktop/releases/download/v0.15.1-desktop.1/buildx-v0.15.1-desktop.1.linux-arm-v7.sbom.json",
|
||||
"https://github.com/docker/buildx-desktop/releases/download/v0.15.1-desktop.1/buildx-v0.15.1-desktop.1.linux-arm64",
|
||||
"https://github.com/docker/buildx-desktop/releases/download/v0.15.1-desktop.1/buildx-v0.15.1-desktop.1.linux-arm64.provenance.json",
|
||||
"https://github.com/docker/buildx-desktop/releases/download/v0.15.1-desktop.1/buildx-v0.15.1-desktop.1.linux-arm64.sbom.json",
|
||||
"https://github.com/docker/buildx-desktop/releases/download/v0.15.1-desktop.1/buildx-v0.15.1-desktop.1.linux-ppc64le",
|
||||
"https://github.com/docker/buildx-desktop/releases/download/v0.15.1-desktop.1/buildx-v0.15.1-desktop.1.linux-ppc64le.provenance.json",
|
||||
"https://github.com/docker/buildx-desktop/releases/download/v0.15.1-desktop.1/buildx-v0.15.1-desktop.1.linux-ppc64le.sbom.json",
|
||||
"https://github.com/docker/buildx-desktop/releases/download/v0.15.1-desktop.1/buildx-v0.15.1-desktop.1.linux-riscv64",
|
||||
"https://github.com/docker/buildx-desktop/releases/download/v0.15.1-desktop.1/buildx-v0.15.1-desktop.1.linux-riscv64.provenance.json",
|
||||
"https://github.com/docker/buildx-desktop/releases/download/v0.15.1-desktop.1/buildx-v0.15.1-desktop.1.linux-riscv64.sbom.json",
|
||||
"https://github.com/docker/buildx-desktop/releases/download/v0.15.1-desktop.1/buildx-v0.15.1-desktop.1.linux-s390x",
|
||||
"https://github.com/docker/buildx-desktop/releases/download/v0.15.1-desktop.1/buildx-v0.15.1-desktop.1.linux-s390x.provenance.json",
|
||||
"https://github.com/docker/buildx-desktop/releases/download/v0.15.1-desktop.1/buildx-v0.15.1-desktop.1.linux-s390x.sbom.json",
|
||||
"https://github.com/docker/buildx-desktop/releases/download/v0.15.1-desktop.1/buildx-v0.15.1-desktop.1.windows-amd64.exe",
|
||||
"https://github.com/docker/buildx-desktop/releases/download/v0.15.1-desktop.1/buildx-v0.15.1-desktop.1.windows-amd64.provenance.json",
|
||||
"https://github.com/docker/buildx-desktop/releases/download/v0.15.1-desktop.1/buildx-v0.15.1-desktop.1.windows-amd64.sbom.json",
|
||||
"https://github.com/docker/buildx-desktop/releases/download/v0.15.1-desktop.1/buildx-v0.15.1-desktop.1.windows-arm64.exe",
|
||||
"https://github.com/docker/buildx-desktop/releases/download/v0.15.1-desktop.1/buildx-v0.15.1-desktop.1.windows-arm64.provenance.json",
|
||||
"https://github.com/docker/buildx-desktop/releases/download/v0.15.1-desktop.1/buildx-v0.15.1-desktop.1.windows-arm64.sbom.json",
|
||||
"https://github.com/docker/buildx-desktop/releases/download/v0.15.1-desktop.1/checksums.txt"
|
||||
]
|
||||
},
|
||||
"v0.15.0-desktop.1": {
|
||||
"id": 160473592,
|
||||
"tag_name": "v0.15.0-desktop.1",
|
||||
"html_url": "https://github.com/docker/buildx-desktop/releases/tag/v0.15.0-desktop.1",
|
||||
"assets": [
|
||||
"https://github.com/docker/buildx-desktop/releases/download/v0.15.0-desktop.1/buildx-v0.15.0-desktop.1.darwin-amd64",
|
||||
"https://github.com/docker/buildx-desktop/releases/download/v0.15.0-desktop.1/buildx-v0.15.0-desktop.1.darwin-amd64.provenance.json",
|
||||
"https://github.com/docker/buildx-desktop/releases/download/v0.15.0-desktop.1/buildx-v0.15.0-desktop.1.darwin-amd64.sbom.json",
|
||||
"https://github.com/docker/buildx-desktop/releases/download/v0.15.0-desktop.1/buildx-v0.15.0-desktop.1.darwin-arm64",
|
||||
"https://github.com/docker/buildx-desktop/releases/download/v0.15.0-desktop.1/buildx-v0.15.0-desktop.1.darwin-arm64.provenance.json",
|
||||
"https://github.com/docker/buildx-desktop/releases/download/v0.15.0-desktop.1/buildx-v0.15.0-desktop.1.darwin-arm64.sbom.json",
|
||||
"https://github.com/docker/buildx-desktop/releases/download/v0.15.0-desktop.1/buildx-v0.15.0-desktop.1.linux-amd64",
|
||||
"https://github.com/docker/buildx-desktop/releases/download/v0.15.0-desktop.1/buildx-v0.15.0-desktop.1.linux-amd64.provenance.json",
|
||||
"https://github.com/docker/buildx-desktop/releases/download/v0.15.0-desktop.1/buildx-v0.15.0-desktop.1.linux-amd64.sbom.json",
|
||||
"https://github.com/docker/buildx-desktop/releases/download/v0.15.0-desktop.1/buildx-v0.15.0-desktop.1.linux-arm-v6",
|
||||
"https://github.com/docker/buildx-desktop/releases/download/v0.15.0-desktop.1/buildx-v0.15.0-desktop.1.linux-arm-v6.provenance.json",
|
||||
"https://github.com/docker/buildx-desktop/releases/download/v0.15.0-desktop.1/buildx-v0.15.0-desktop.1.linux-arm-v6.sbom.json",
|
||||
"https://github.com/docker/buildx-desktop/releases/download/v0.15.0-desktop.1/buildx-v0.15.0-desktop.1.linux-arm-v7",
|
||||
"https://github.com/docker/buildx-desktop/releases/download/v0.15.0-desktop.1/buildx-v0.15.0-desktop.1.linux-arm-v7.provenance.json",
|
||||
"https://github.com/docker/buildx-desktop/releases/download/v0.15.0-desktop.1/buildx-v0.15.0-desktop.1.linux-arm-v7.sbom.json",
|
||||
"https://github.com/docker/buildx-desktop/releases/download/v0.15.0-desktop.1/buildx-v0.15.0-desktop.1.linux-arm64",
|
||||
"https://github.com/docker/buildx-desktop/releases/download/v0.15.0-desktop.1/buildx-v0.15.0-desktop.1.linux-arm64.provenance.json",
|
||||
"https://github.com/docker/buildx-desktop/releases/download/v0.15.0-desktop.1/buildx-v0.15.0-desktop.1.linux-arm64.sbom.json",
|
||||
"https://github.com/docker/buildx-desktop/releases/download/v0.15.0-desktop.1/buildx-v0.15.0-desktop.1.linux-ppc64le",
|
||||
"https://github.com/docker/buildx-desktop/releases/download/v0.15.0-desktop.1/buildx-v0.15.0-desktop.1.linux-ppc64le.provenance.json",
|
||||
"https://github.com/docker/buildx-desktop/releases/download/v0.15.0-desktop.1/buildx-v0.15.0-desktop.1.linux-ppc64le.sbom.json",
|
||||
"https://github.com/docker/buildx-desktop/releases/download/v0.15.0-desktop.1/buildx-v0.15.0-desktop.1.linux-riscv64",
|
||||
"https://github.com/docker/buildx-desktop/releases/download/v0.15.0-desktop.1/buildx-v0.15.0-desktop.1.linux-riscv64.provenance.json",
|
||||
"https://github.com/docker/buildx-desktop/releases/download/v0.15.0-desktop.1/buildx-v0.15.0-desktop.1.linux-riscv64.sbom.json",
|
||||
"https://github.com/docker/buildx-desktop/releases/download/v0.15.0-desktop.1/buildx-v0.15.0-desktop.1.linux-s390x",
|
||||
"https://github.com/docker/buildx-desktop/releases/download/v0.15.0-desktop.1/buildx-v0.15.0-desktop.1.linux-s390x.provenance.json",
|
||||
"https://github.com/docker/buildx-desktop/releases/download/v0.15.0-desktop.1/buildx-v0.15.0-desktop.1.linux-s390x.sbom.json",
|
||||
"https://github.com/docker/buildx-desktop/releases/download/v0.15.0-desktop.1/buildx-v0.15.0-desktop.1.windows-amd64.exe",
|
||||
"https://github.com/docker/buildx-desktop/releases/download/v0.15.0-desktop.1/buildx-v0.15.0-desktop.1.windows-amd64.provenance.json",
|
||||
"https://github.com/docker/buildx-desktop/releases/download/v0.15.0-desktop.1/buildx-v0.15.0-desktop.1.windows-amd64.sbom.json",
|
||||
"https://github.com/docker/buildx-desktop/releases/download/v0.15.0-desktop.1/buildx-v0.15.0-desktop.1.windows-arm64.exe",
|
||||
"https://github.com/docker/buildx-desktop/releases/download/v0.15.0-desktop.1/buildx-v0.15.0-desktop.1.windows-arm64.provenance.json",
|
||||
"https://github.com/docker/buildx-desktop/releases/download/v0.15.0-desktop.1/buildx-v0.15.0-desktop.1.windows-arm64.sbom.json",
|
||||
"https://github.com/docker/buildx-desktop/releases/download/v0.15.0-desktop.1/checksums.txt"
|
||||
]
|
||||
},
|
||||
"v0.14.1-desktop.1": {
|
||||
|
||||
115
.github/buildx-releases.json
vendored
115
.github/buildx-releases.json
vendored
@@ -1,43 +1,84 @@
|
||||
{
|
||||
"latest": {
|
||||
"id": 159941316,
|
||||
"tag_name": "v0.15.0",
|
||||
"html_url": "https://github.com/docker/buildx/releases/tag/v0.15.0",
|
||||
"id": 161126938,
|
||||
"tag_name": "v0.15.1",
|
||||
"html_url": "https://github.com/docker/buildx/releases/tag/v0.15.1",
|
||||
"assets": [
|
||||
"https://github.com/docker/buildx/releases/download/v0.15.0/buildx-v0.15.0.darwin-amd64",
|
||||
"https://github.com/docker/buildx/releases/download/v0.15.0/buildx-v0.15.0.darwin-amd64.provenance.json",
|
||||
"https://github.com/docker/buildx/releases/download/v0.15.0/buildx-v0.15.0.darwin-amd64.sbom.json",
|
||||
"https://github.com/docker/buildx/releases/download/v0.15.0/buildx-v0.15.0.darwin-arm64",
|
||||
"https://github.com/docker/buildx/releases/download/v0.15.0/buildx-v0.15.0.darwin-arm64.provenance.json",
|
||||
"https://github.com/docker/buildx/releases/download/v0.15.0/buildx-v0.15.0.darwin-arm64.sbom.json",
|
||||
"https://github.com/docker/buildx/releases/download/v0.15.0/buildx-v0.15.0.linux-amd64",
|
||||
"https://github.com/docker/buildx/releases/download/v0.15.0/buildx-v0.15.0.linux-amd64.provenance.json",
|
||||
"https://github.com/docker/buildx/releases/download/v0.15.0/buildx-v0.15.0.linux-amd64.sbom.json",
|
||||
"https://github.com/docker/buildx/releases/download/v0.15.0/buildx-v0.15.0.linux-arm-v6",
|
||||
"https://github.com/docker/buildx/releases/download/v0.15.0/buildx-v0.15.0.linux-arm-v6.provenance.json",
|
||||
"https://github.com/docker/buildx/releases/download/v0.15.0/buildx-v0.15.0.linux-arm-v6.sbom.json",
|
||||
"https://github.com/docker/buildx/releases/download/v0.15.0/buildx-v0.15.0.linux-arm-v7",
|
||||
"https://github.com/docker/buildx/releases/download/v0.15.0/buildx-v0.15.0.linux-arm-v7.provenance.json",
|
||||
"https://github.com/docker/buildx/releases/download/v0.15.0/buildx-v0.15.0.linux-arm-v7.sbom.json",
|
||||
"https://github.com/docker/buildx/releases/download/v0.15.0/buildx-v0.15.0.linux-arm64",
|
||||
"https://github.com/docker/buildx/releases/download/v0.15.0/buildx-v0.15.0.linux-arm64.provenance.json",
|
||||
"https://github.com/docker/buildx/releases/download/v0.15.0/buildx-v0.15.0.linux-arm64.sbom.json",
|
||||
"https://github.com/docker/buildx/releases/download/v0.15.0/buildx-v0.15.0.linux-ppc64le",
|
||||
"https://github.com/docker/buildx/releases/download/v0.15.0/buildx-v0.15.0.linux-ppc64le.provenance.json",
|
||||
"https://github.com/docker/buildx/releases/download/v0.15.0/buildx-v0.15.0.linux-ppc64le.sbom.json",
|
||||
"https://github.com/docker/buildx/releases/download/v0.15.0/buildx-v0.15.0.linux-riscv64",
|
||||
"https://github.com/docker/buildx/releases/download/v0.15.0/buildx-v0.15.0.linux-riscv64.provenance.json",
|
||||
"https://github.com/docker/buildx/releases/download/v0.15.0/buildx-v0.15.0.linux-riscv64.sbom.json",
|
||||
"https://github.com/docker/buildx/releases/download/v0.15.0/buildx-v0.15.0.linux-s390x",
|
||||
"https://github.com/docker/buildx/releases/download/v0.15.0/buildx-v0.15.0.linux-s390x.provenance.json",
|
||||
"https://github.com/docker/buildx/releases/download/v0.15.0/buildx-v0.15.0.linux-s390x.sbom.json",
|
||||
"https://github.com/docker/buildx/releases/download/v0.15.0/buildx-v0.15.0.windows-amd64.exe",
|
||||
"https://github.com/docker/buildx/releases/download/v0.15.0/buildx-v0.15.0.windows-amd64.provenance.json",
|
||||
"https://github.com/docker/buildx/releases/download/v0.15.0/buildx-v0.15.0.windows-amd64.sbom.json",
|
||||
"https://github.com/docker/buildx/releases/download/v0.15.0/buildx-v0.15.0.windows-arm64.exe",
|
||||
"https://github.com/docker/buildx/releases/download/v0.15.0/buildx-v0.15.0.windows-arm64.provenance.json",
|
||||
"https://github.com/docker/buildx/releases/download/v0.15.0/buildx-v0.15.0.windows-arm64.sbom.json",
|
||||
"https://github.com/docker/buildx/releases/download/v0.15.0/checksums.txt"
|
||||
"https://github.com/docker/buildx/releases/download/v0.15.1/buildx-v0.15.1.darwin-amd64",
|
||||
"https://github.com/docker/buildx/releases/download/v0.15.1/buildx-v0.15.1.darwin-amd64.provenance.json",
|
||||
"https://github.com/docker/buildx/releases/download/v0.15.1/buildx-v0.15.1.darwin-amd64.sbom.json",
|
||||
"https://github.com/docker/buildx/releases/download/v0.15.1/buildx-v0.15.1.darwin-arm64",
|
||||
"https://github.com/docker/buildx/releases/download/v0.15.1/buildx-v0.15.1.darwin-arm64.provenance.json",
|
||||
"https://github.com/docker/buildx/releases/download/v0.15.1/buildx-v0.15.1.darwin-arm64.sbom.json",
|
||||
"https://github.com/docker/buildx/releases/download/v0.15.1/buildx-v0.15.1.linux-amd64",
|
||||
"https://github.com/docker/buildx/releases/download/v0.15.1/buildx-v0.15.1.linux-amd64.provenance.json",
|
||||
"https://github.com/docker/buildx/releases/download/v0.15.1/buildx-v0.15.1.linux-amd64.sbom.json",
|
||||
"https://github.com/docker/buildx/releases/download/v0.15.1/buildx-v0.15.1.linux-arm-v6",
|
||||
"https://github.com/docker/buildx/releases/download/v0.15.1/buildx-v0.15.1.linux-arm-v6.provenance.json",
|
||||
"https://github.com/docker/buildx/releases/download/v0.15.1/buildx-v0.15.1.linux-arm-v6.sbom.json",
|
||||
"https://github.com/docker/buildx/releases/download/v0.15.1/buildx-v0.15.1.linux-arm-v7",
|
||||
"https://github.com/docker/buildx/releases/download/v0.15.1/buildx-v0.15.1.linux-arm-v7.provenance.json",
|
||||
"https://github.com/docker/buildx/releases/download/v0.15.1/buildx-v0.15.1.linux-arm-v7.sbom.json",
|
||||
"https://github.com/docker/buildx/releases/download/v0.15.1/buildx-v0.15.1.linux-arm64",
|
||||
"https://github.com/docker/buildx/releases/download/v0.15.1/buildx-v0.15.1.linux-arm64.provenance.json",
|
||||
"https://github.com/docker/buildx/releases/download/v0.15.1/buildx-v0.15.1.linux-arm64.sbom.json",
|
||||
"https://github.com/docker/buildx/releases/download/v0.15.1/buildx-v0.15.1.linux-ppc64le",
|
||||
"https://github.com/docker/buildx/releases/download/v0.15.1/buildx-v0.15.1.linux-ppc64le.provenance.json",
|
||||
"https://github.com/docker/buildx/releases/download/v0.15.1/buildx-v0.15.1.linux-ppc64le.sbom.json",
|
||||
"https://github.com/docker/buildx/releases/download/v0.15.1/buildx-v0.15.1.linux-riscv64",
|
||||
"https://github.com/docker/buildx/releases/download/v0.15.1/buildx-v0.15.1.linux-riscv64.provenance.json",
|
||||
"https://github.com/docker/buildx/releases/download/v0.15.1/buildx-v0.15.1.linux-riscv64.sbom.json",
|
||||
"https://github.com/docker/buildx/releases/download/v0.15.1/buildx-v0.15.1.linux-s390x",
|
||||
"https://github.com/docker/buildx/releases/download/v0.15.1/buildx-v0.15.1.linux-s390x.provenance.json",
|
||||
"https://github.com/docker/buildx/releases/download/v0.15.1/buildx-v0.15.1.linux-s390x.sbom.json",
|
||||
"https://github.com/docker/buildx/releases/download/v0.15.1/buildx-v0.15.1.windows-amd64.exe",
|
||||
"https://github.com/docker/buildx/releases/download/v0.15.1/buildx-v0.15.1.windows-amd64.provenance.json",
|
||||
"https://github.com/docker/buildx/releases/download/v0.15.1/buildx-v0.15.1.windows-amd64.sbom.json",
|
||||
"https://github.com/docker/buildx/releases/download/v0.15.1/buildx-v0.15.1.windows-arm64.exe",
|
||||
"https://github.com/docker/buildx/releases/download/v0.15.1/buildx-v0.15.1.windows-arm64.provenance.json",
|
||||
"https://github.com/docker/buildx/releases/download/v0.15.1/buildx-v0.15.1.windows-arm64.sbom.json",
|
||||
"https://github.com/docker/buildx/releases/download/v0.15.1/checksums.txt"
|
||||
]
|
||||
},
|
||||
"v0.15.1": {
|
||||
"id": 161126938,
|
||||
"tag_name": "v0.15.1",
|
||||
"html_url": "https://github.com/docker/buildx/releases/tag/v0.15.1",
|
||||
"assets": [
|
||||
"https://github.com/docker/buildx/releases/download/v0.15.1/buildx-v0.15.1.darwin-amd64",
|
||||
"https://github.com/docker/buildx/releases/download/v0.15.1/buildx-v0.15.1.darwin-amd64.provenance.json",
|
||||
"https://github.com/docker/buildx/releases/download/v0.15.1/buildx-v0.15.1.darwin-amd64.sbom.json",
|
||||
"https://github.com/docker/buildx/releases/download/v0.15.1/buildx-v0.15.1.darwin-arm64",
|
||||
"https://github.com/docker/buildx/releases/download/v0.15.1/buildx-v0.15.1.darwin-arm64.provenance.json",
|
||||
"https://github.com/docker/buildx/releases/download/v0.15.1/buildx-v0.15.1.darwin-arm64.sbom.json",
|
||||
"https://github.com/docker/buildx/releases/download/v0.15.1/buildx-v0.15.1.linux-amd64",
|
||||
"https://github.com/docker/buildx/releases/download/v0.15.1/buildx-v0.15.1.linux-amd64.provenance.json",
|
||||
"https://github.com/docker/buildx/releases/download/v0.15.1/buildx-v0.15.1.linux-amd64.sbom.json",
|
||||
"https://github.com/docker/buildx/releases/download/v0.15.1/buildx-v0.15.1.linux-arm-v6",
|
||||
"https://github.com/docker/buildx/releases/download/v0.15.1/buildx-v0.15.1.linux-arm-v6.provenance.json",
|
||||
"https://github.com/docker/buildx/releases/download/v0.15.1/buildx-v0.15.1.linux-arm-v6.sbom.json",
|
||||
"https://github.com/docker/buildx/releases/download/v0.15.1/buildx-v0.15.1.linux-arm-v7",
|
||||
"https://github.com/docker/buildx/releases/download/v0.15.1/buildx-v0.15.1.linux-arm-v7.provenance.json",
|
||||
"https://github.com/docker/buildx/releases/download/v0.15.1/buildx-v0.15.1.linux-arm-v7.sbom.json",
|
||||
"https://github.com/docker/buildx/releases/download/v0.15.1/buildx-v0.15.1.linux-arm64",
|
||||
"https://github.com/docker/buildx/releases/download/v0.15.1/buildx-v0.15.1.linux-arm64.provenance.json",
|
||||
"https://github.com/docker/buildx/releases/download/v0.15.1/buildx-v0.15.1.linux-arm64.sbom.json",
|
||||
"https://github.com/docker/buildx/releases/download/v0.15.1/buildx-v0.15.1.linux-ppc64le",
|
||||
"https://github.com/docker/buildx/releases/download/v0.15.1/buildx-v0.15.1.linux-ppc64le.provenance.json",
|
||||
"https://github.com/docker/buildx/releases/download/v0.15.1/buildx-v0.15.1.linux-ppc64le.sbom.json",
|
||||
"https://github.com/docker/buildx/releases/download/v0.15.1/buildx-v0.15.1.linux-riscv64",
|
||||
"https://github.com/docker/buildx/releases/download/v0.15.1/buildx-v0.15.1.linux-riscv64.provenance.json",
|
||||
"https://github.com/docker/buildx/releases/download/v0.15.1/buildx-v0.15.1.linux-riscv64.sbom.json",
|
||||
"https://github.com/docker/buildx/releases/download/v0.15.1/buildx-v0.15.1.linux-s390x",
|
||||
"https://github.com/docker/buildx/releases/download/v0.15.1/buildx-v0.15.1.linux-s390x.provenance.json",
|
||||
"https://github.com/docker/buildx/releases/download/v0.15.1/buildx-v0.15.1.linux-s390x.sbom.json",
|
||||
"https://github.com/docker/buildx/releases/download/v0.15.1/buildx-v0.15.1.windows-amd64.exe",
|
||||
"https://github.com/docker/buildx/releases/download/v0.15.1/buildx-v0.15.1.windows-amd64.provenance.json",
|
||||
"https://github.com/docker/buildx/releases/download/v0.15.1/buildx-v0.15.1.windows-amd64.sbom.json",
|
||||
"https://github.com/docker/buildx/releases/download/v0.15.1/buildx-v0.15.1.windows-arm64.exe",
|
||||
"https://github.com/docker/buildx/releases/download/v0.15.1/buildx-v0.15.1.windows-arm64.provenance.json",
|
||||
"https://github.com/docker/buildx/releases/download/v0.15.1/buildx-v0.15.1.windows-arm64.sbom.json",
|
||||
"https://github.com/docker/buildx/releases/download/v0.15.1/checksums.txt"
|
||||
]
|
||||
},
|
||||
"v0.15.0": {
|
||||
|
||||
42
.github/docker-releases.json
vendored
42
.github/docker-releases.json
vendored
@@ -1,8 +1,44 @@
|
||||
{
|
||||
"latest": {
|
||||
"id": 159031384,
|
||||
"tag_name": "v26.1.4",
|
||||
"html_url": "https://github.com/moby/moby/releases/tag/v26.1.4",
|
||||
"id": 162600493,
|
||||
"tag_name": "v27.0.2",
|
||||
"html_url": "https://github.com/moby/moby/releases/tag/v27.0.2",
|
||||
"assets": []
|
||||
},
|
||||
"v27.0.2": {
|
||||
"id": 162600493,
|
||||
"tag_name": "v27.0.2",
|
||||
"html_url": "https://github.com/moby/moby/releases/tag/v27.0.2",
|
||||
"assets": []
|
||||
},
|
||||
"v27.0.1": {
|
||||
"id": 162009909,
|
||||
"tag_name": "v27.0.1",
|
||||
"html_url": "https://github.com/moby/moby/releases/tag/v27.0.1",
|
||||
"assets": []
|
||||
},
|
||||
"v27.0.1-rc.1": {
|
||||
"id": 161457618,
|
||||
"tag_name": "v27.0.1-rc.1",
|
||||
"html_url": "https://github.com/moby/moby/releases/tag/v27.0.1-rc.1",
|
||||
"assets": []
|
||||
},
|
||||
"v23.0.13": {
|
||||
"id": 161533551,
|
||||
"tag_name": "v23.0.13",
|
||||
"html_url": "https://github.com/moby/moby/releases/tag/v23.0.13",
|
||||
"assets": []
|
||||
},
|
||||
"v27.0.0-rc.2": {
|
||||
"id": 160534078,
|
||||
"tag_name": "v27.0.0-rc.2",
|
||||
"html_url": "https://github.com/moby/moby/releases/tag/v27.0.0-rc.2",
|
||||
"assets": []
|
||||
},
|
||||
"v27.0.0-rc.1": {
|
||||
"id": 160112985,
|
||||
"tag_name": "v27.0.0-rc.1",
|
||||
"html_url": "https://github.com/moby/moby/releases/tag/v27.0.0-rc.1",
|
||||
"assets": []
|
||||
},
|
||||
"v26.1.4": {
|
||||
|
||||
2
.github/workflows/build.yml
vendored
2
.github/workflows/build.yml
vendored
@@ -21,6 +21,6 @@ jobs:
|
||||
uses: actions/checkout@v4
|
||||
-
|
||||
name: Build
|
||||
uses: docker/bake-action@v4
|
||||
uses: docker/bake-action@v5
|
||||
with:
|
||||
targets: build
|
||||
|
||||
@@ -12,8 +12,8 @@ on:
|
||||
branches:
|
||||
- 'main'
|
||||
pull_request:
|
||||
paths-ignore:
|
||||
- '.github/*-releases.json'
|
||||
paths:
|
||||
- '.github/workflows/buildx-lab-releases-json.yml'
|
||||
|
||||
jobs:
|
||||
generate:
|
||||
@@ -45,7 +45,7 @@ jobs:
|
||||
git add -A .
|
||||
-
|
||||
name: Create PR
|
||||
uses: peter-evans/create-pull-request@6d6857d36972b65feb161a90e484f2984215f83e # v6.0.5
|
||||
uses: peter-evans/create-pull-request@c5a7806660adbe173f04e3e038b0ccdcd758773c # v6.1.0
|
||||
with:
|
||||
base: main
|
||||
branch: bot/buildx-lab-releases-json
|
||||
|
||||
6
.github/workflows/buildx-releases-json.yml
vendored
6
.github/workflows/buildx-releases-json.yml
vendored
@@ -12,8 +12,8 @@ on:
|
||||
branches:
|
||||
- 'main'
|
||||
pull_request:
|
||||
paths-ignore:
|
||||
- '.github/*-releases.json'
|
||||
paths:
|
||||
- '.github/workflows/buildx-releases-json.yml'
|
||||
|
||||
jobs:
|
||||
generate:
|
||||
@@ -45,7 +45,7 @@ jobs:
|
||||
git add -A .
|
||||
-
|
||||
name: Create PR
|
||||
uses: peter-evans/create-pull-request@6d6857d36972b65feb161a90e484f2984215f83e # v6.0.5
|
||||
uses: peter-evans/create-pull-request@c5a7806660adbe173f04e3e038b0ccdcd758773c # v6.1.0
|
||||
with:
|
||||
base: main
|
||||
branch: bot/buildx-releases-json
|
||||
|
||||
6
.github/workflows/docker-releases-json.yml
vendored
6
.github/workflows/docker-releases-json.yml
vendored
@@ -12,8 +12,8 @@ on:
|
||||
branches:
|
||||
- 'main'
|
||||
pull_request:
|
||||
paths-ignore:
|
||||
- '.github/*-releases.json'
|
||||
paths:
|
||||
- '.github/workflows/docker-releases-json.yml'
|
||||
|
||||
jobs:
|
||||
generate:
|
||||
@@ -45,7 +45,7 @@ jobs:
|
||||
git add -A .
|
||||
-
|
||||
name: Create PR
|
||||
uses: peter-evans/create-pull-request@6d6857d36972b65feb161a90e484f2984215f83e # v6.0.5
|
||||
uses: peter-evans/create-pull-request@c5a7806660adbe173f04e3e038b0ccdcd758773c # v6.1.0
|
||||
with:
|
||||
base: main
|
||||
branch: bot/docker-releases-json
|
||||
|
||||
2
.github/workflows/publish.yml
vendored
2
.github/workflows/publish.yml
vendored
@@ -21,7 +21,7 @@ jobs:
|
||||
uses: docker/setup-buildx-action@v3
|
||||
-
|
||||
name: Publish
|
||||
uses: docker/bake-action@v4
|
||||
uses: docker/bake-action@v5
|
||||
with:
|
||||
targets: publish
|
||||
env:
|
||||
|
||||
7
.github/workflows/test.yml
vendored
7
.github/workflows/test.yml
vendored
@@ -15,7 +15,8 @@ on:
|
||||
|
||||
env:
|
||||
NODE_VERSION: "20"
|
||||
BUILDX_VERSION: "v0.15.0"
|
||||
BUILDX_VERSION: "https://github.com/docker/buildx.git#d8c9ebde1fdcf659f1fa3efa6ccc27a28b0f1564" # https://github.com/docker/buildx/pull/2551
|
||||
BUILDKIT_IMAGE: "moby/buildkit:v0.14.1"
|
||||
|
||||
jobs:
|
||||
test:
|
||||
@@ -26,7 +27,7 @@ jobs:
|
||||
uses: actions/checkout@v4
|
||||
-
|
||||
name: Test
|
||||
uses: docker/bake-action@v4
|
||||
uses: docker/bake-action@v5
|
||||
with:
|
||||
targets: test-coverage
|
||||
env:
|
||||
@@ -138,6 +139,7 @@ jobs:
|
||||
uses: docker/setup-buildx-action@v3
|
||||
with:
|
||||
version: ${{ env.BUILDX_VERSION }}
|
||||
driver-opts: image=${{ env.BUILDKIT_IMAGE }}
|
||||
use: false
|
||||
-
|
||||
name: Install
|
||||
@@ -149,6 +151,7 @@ jobs:
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
CTN_BUILDER_NAME: ${{ steps.builder.outputs.name }}
|
||||
TEST_FOR_SUMMARY: ${{ secrets.TEST_FOR_SUMMARY }}
|
||||
-
|
||||
name: Check coverage
|
||||
run: |
|
||||
|
||||
2
.github/workflows/validate.yml
vendored
2
.github/workflows/validate.yml
vendored
@@ -42,6 +42,6 @@ jobs:
|
||||
uses: actions/checkout@v4
|
||||
-
|
||||
name: Validate
|
||||
uses: docker/bake-action@v4
|
||||
uses: docker/bake-action@v5
|
||||
with:
|
||||
targets: ${{ matrix.target }}
|
||||
|
||||
@@ -14,17 +14,13 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
import {beforeEach, describe, expect, it, jest, test} from '@jest/globals';
|
||||
import {describe, expect, it, jest, test} from '@jest/globals';
|
||||
|
||||
import {BuildKit} from '../../src/buildkit/buildkit';
|
||||
import {Builder} from '../../src/buildx/builder';
|
||||
|
||||
import {BuilderInfo} from '../../src/types/buildx/builder';
|
||||
|
||||
beforeEach(() => {
|
||||
jest.clearAllMocks();
|
||||
});
|
||||
|
||||
jest.spyOn(Builder.prototype, 'inspect').mockImplementation(async (): Promise<BuilderInfo> => {
|
||||
return {
|
||||
name: 'builder2',
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
import {describe, expect, jest, test, beforeEach, afterEach} from '@jest/globals';
|
||||
import {describe, expect, jest, test, afterEach} from '@jest/globals';
|
||||
import * as fs from 'fs';
|
||||
import * as path from 'path';
|
||||
import * as rimraf from 'rimraf';
|
||||
@@ -38,10 +38,6 @@ jest.spyOn(Context, 'tmpName').mockImplementation((): string => {
|
||||
return tmpName;
|
||||
});
|
||||
|
||||
beforeEach(() => {
|
||||
jest.clearAllMocks();
|
||||
});
|
||||
|
||||
afterEach(() => {
|
||||
rimraf.sync(tmpDir);
|
||||
});
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
import {beforeEach, describe, expect, jest, test} from '@jest/globals';
|
||||
import {describe, expect, test} from '@jest/globals';
|
||||
import * as fs from 'fs';
|
||||
import * as path from 'path';
|
||||
|
||||
@@ -25,10 +25,6 @@ const fixturesDir = path.join(__dirname, '..', 'fixtures');
|
||||
|
||||
const maybe = !process.env.GITHUB_ACTIONS || (process.env.GITHUB_ACTIONS === 'true' && process.env.ImageOS && process.env.ImageOS.startsWith('ubuntu')) ? describe : describe.skip;
|
||||
|
||||
beforeEach(() => {
|
||||
jest.clearAllMocks();
|
||||
});
|
||||
|
||||
maybe('getDefinition', () => {
|
||||
// prettier-ignore
|
||||
test.each([
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
import {afterEach, beforeEach, describe, expect, it, jest, test} from '@jest/globals';
|
||||
import {afterEach, describe, expect, it, jest, test} from '@jest/globals';
|
||||
import * as fs from 'fs';
|
||||
import * as path from 'path';
|
||||
import * as rimraf from 'rimraf';
|
||||
@@ -49,10 +49,6 @@ jest.spyOn(Context, 'tmpName').mockImplementation((): string => {
|
||||
return tmpName;
|
||||
});
|
||||
|
||||
beforeEach(() => {
|
||||
jest.clearAllMocks();
|
||||
});
|
||||
|
||||
afterEach(() => {
|
||||
rimraf.sync(tmpDir);
|
||||
});
|
||||
|
||||
@@ -22,17 +22,11 @@ import * as rimraf from 'rimraf';
|
||||
import {Context} from '../../src/context';
|
||||
import {Build} from '../../src/buildx/build';
|
||||
|
||||
import {BuildMetadata} from '../../src/types/buildx/build';
|
||||
|
||||
const fixturesDir = path.join(__dirname, '..', 'fixtures');
|
||||
// prettier-ignore
|
||||
const tmpDir = path.join(process.env.TEMP || '/tmp', 'buildx-inputs-jest');
|
||||
const tmpName = path.join(tmpDir, '.tmpname-jest');
|
||||
const metadata: BuildMetadata = {
|
||||
'buildx.build.ref': 'default/default/n6ibcp9b2pw108rrz7ywdznvo',
|
||||
'containerimage.config.digest': 'sha256:059b68a595b22564a1cbc167f369349fdc2ecc1f7bc092c2235cbf601a795fd',
|
||||
'containerimage.digest': 'sha256:b09b9482c72371486bb2c1d2c2a2633ed1d0b8389e12c8d52b9e052725c0c83c'
|
||||
};
|
||||
const metadata = JSON.parse(fs.readFileSync(path.join(fixturesDir, 'metadata.json'), 'utf-8'));
|
||||
|
||||
jest.spyOn(Context, 'tmpDir').mockImplementation((): string => {
|
||||
if (!fs.existsSync(tmpDir)) {
|
||||
@@ -45,10 +39,6 @@ jest.spyOn(Context, 'tmpName').mockImplementation((): string => {
|
||||
return tmpName;
|
||||
});
|
||||
|
||||
beforeEach(() => {
|
||||
jest.clearAllMocks();
|
||||
});
|
||||
|
||||
afterEach(() => {
|
||||
rimraf.sync(tmpDir);
|
||||
});
|
||||
@@ -78,6 +68,28 @@ describe('resolveRef', () => {
|
||||
});
|
||||
});
|
||||
|
||||
describe('resolveProvenance', () => {
|
||||
it('matches', async () => {
|
||||
const build = new Build();
|
||||
fs.writeFileSync(build.getMetadataFilePath(), JSON.stringify(metadata));
|
||||
const provenance = build.resolveProvenance();
|
||||
expect(provenance).toBeDefined();
|
||||
expect(provenance?.buildType).toEqual('https://mobyproject.org/buildkit@v1');
|
||||
expect(provenance?.materials).toBeDefined();
|
||||
expect(provenance?.materials?.length).toEqual(2);
|
||||
});
|
||||
});
|
||||
|
||||
describe('resolveWarnings', () => {
|
||||
it('matches', async () => {
|
||||
const build = new Build();
|
||||
fs.writeFileSync(build.getMetadataFilePath(), JSON.stringify(metadata));
|
||||
const warnings = build.resolveWarnings();
|
||||
expect(warnings).toBeDefined();
|
||||
expect(warnings?.length).toEqual(3);
|
||||
});
|
||||
});
|
||||
|
||||
describe('resolveDigest', () => {
|
||||
it('matches', async () => {
|
||||
const build = new Build();
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
import {beforeEach, describe, expect, it, jest, test} from '@jest/globals';
|
||||
import {describe, expect, it, jest, test} from '@jest/globals';
|
||||
import * as fs from 'fs';
|
||||
import * as path from 'path';
|
||||
|
||||
@@ -25,10 +25,6 @@ import {BuilderInfo} from '../../src/types/buildx/builder';
|
||||
|
||||
const fixturesDir = path.join(__dirname, '..', 'fixtures');
|
||||
|
||||
beforeEach(() => {
|
||||
jest.clearAllMocks();
|
||||
});
|
||||
|
||||
jest.spyOn(Builder.prototype, 'inspect').mockImplementation(async (): Promise<BuilderInfo> => {
|
||||
return {
|
||||
name: 'builder2',
|
||||
|
||||
@@ -42,10 +42,6 @@ jest.spyOn(Context, 'tmpName').mockImplementation((): string => {
|
||||
return tmpName;
|
||||
});
|
||||
|
||||
beforeEach(() => {
|
||||
jest.clearAllMocks();
|
||||
});
|
||||
|
||||
afterEach(() => {
|
||||
rimraf.sync(tmpDir);
|
||||
});
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
import {beforeEach, describe, expect, jest, test} from '@jest/globals';
|
||||
import {describe, expect, test} from '@jest/globals';
|
||||
import * as fs from 'fs';
|
||||
import * as path from 'path';
|
||||
|
||||
@@ -31,10 +31,6 @@ const tmpDir = path.join(process.env.TEMP || '/tmp', 'buildx-history-jest');
|
||||
|
||||
const maybe = !process.env.GITHUB_ACTIONS || (process.env.GITHUB_ACTIONS === 'true' && process.env.ImageOS && process.env.ImageOS.startsWith('ubuntu')) ? describe : describe.skip;
|
||||
|
||||
beforeEach(() => {
|
||||
jest.clearAllMocks();
|
||||
});
|
||||
|
||||
maybe('exportBuild', () => {
|
||||
// prettier-ignore
|
||||
test.each([
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
import {describe, expect, it, jest, test, beforeEach, afterEach} from '@jest/globals';
|
||||
import {describe, expect, it, jest, test, afterEach} from '@jest/globals';
|
||||
import * as fs from 'fs';
|
||||
import * as path from 'path';
|
||||
import * as rimraf from 'rimraf';
|
||||
@@ -25,10 +25,6 @@ import {Install} from '../../src/buildx/install';
|
||||
// prettier-ignore
|
||||
const tmpDir = path.join(process.env.TEMP || '/tmp', 'buildx-jest');
|
||||
|
||||
beforeEach(() => {
|
||||
jest.clearAllMocks();
|
||||
});
|
||||
|
||||
afterEach(function () {
|
||||
rimraf.sync(tmpDir);
|
||||
});
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
import * as fs from 'fs';
|
||||
import * as path from 'path';
|
||||
import * as rimraf from 'rimraf';
|
||||
import {describe, expect, jest, it, beforeEach, afterEach} from '@jest/globals';
|
||||
import {describe, expect, jest, it, afterEach} from '@jest/globals';
|
||||
|
||||
import {Context} from '../src/context';
|
||||
|
||||
@@ -36,10 +36,6 @@ jest.spyOn(Context, 'tmpName').mockImplementation((): string => {
|
||||
return tmpName;
|
||||
});
|
||||
|
||||
beforeEach(() => {
|
||||
jest.clearAllMocks();
|
||||
});
|
||||
|
||||
afterEach(() => {
|
||||
rimraf.sync(tmpDir);
|
||||
});
|
||||
|
||||
@@ -31,10 +31,6 @@ const fixturesDir = path.join(__dirname, '..', 'fixtures');
|
||||
// prettier-ignore
|
||||
const tmpDir = path.join(process.env.TEMP || '/tmp', 'docker-jest');
|
||||
|
||||
beforeEach(() => {
|
||||
jest.clearAllMocks();
|
||||
});
|
||||
|
||||
afterEach(function () {
|
||||
rimraf.sync(tmpDir);
|
||||
});
|
||||
|
||||
@@ -25,10 +25,6 @@ import {Install} from '../../src/docker/install';
|
||||
// prettier-ignore
|
||||
const tmpDir = path.join(process.env.TEMP || '/tmp', 'docker-install-jest');
|
||||
|
||||
beforeEach(() => {
|
||||
jest.clearAllMocks();
|
||||
});
|
||||
|
||||
afterEach(function () {
|
||||
rimraf.sync(tmpDir);
|
||||
});
|
||||
|
||||
@@ -14,17 +14,13 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
import {describe, expect, jest, it, beforeEach} from '@jest/globals';
|
||||
import {describe, expect, jest, it} from '@jest/globals';
|
||||
import * as fs from 'fs';
|
||||
import * as path from 'path';
|
||||
|
||||
import {DockerHub} from '../src/dockerhub';
|
||||
import {RepositoryResponse, RepositoryTagsResponse} from '../src/types/dockerhub';
|
||||
|
||||
beforeEach(() => {
|
||||
jest.clearAllMocks();
|
||||
});
|
||||
|
||||
import repoInfoFixture from './fixtures/dockerhub-repoinfo.json';
|
||||
import repoTagsFixture from './fixtures/dockerhub-repotags.json';
|
||||
import repoAllTagsFixture from './fixtures/dockerhub-repoalltags.json';
|
||||
|
||||
@@ -14,14 +14,10 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
import {beforeEach, describe, expect, it, jest} from '@jest/globals';
|
||||
import {describe, expect, it, jest} from '@jest/globals';
|
||||
|
||||
import {Exec} from '../src/exec';
|
||||
|
||||
beforeEach(() => {
|
||||
jest.clearAllMocks();
|
||||
});
|
||||
|
||||
describe('exec', () => {
|
||||
it('returns docker version', async () => {
|
||||
const execSpy = jest.spyOn(Exec, 'exec');
|
||||
|
||||
19
__tests__/fixtures/hello-err.Dockerfile
Normal file
19
__tests__/fixtures/hello-err.Dockerfile
Normal file
@@ -0,0 +1,19 @@
|
||||
# syntax=docker/dockerfile:1
|
||||
|
||||
# Copyright 2024 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.
|
||||
|
||||
FROM busybox:latest
|
||||
ARGGG NAME=foo
|
||||
RUN echo "hello $NAME"
|
||||
28
__tests__/fixtures/lint.Dockerfile
Normal file
28
__tests__/fixtures/lint.Dockerfile
Normal file
@@ -0,0 +1,28 @@
|
||||
# syntax=docker/dockerfile-upstream:master
|
||||
|
||||
# Copyright 2024 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.
|
||||
|
||||
frOM busybox as base
|
||||
cOpy lint.Dockerfile .
|
||||
|
||||
from scratch
|
||||
MAINTAINER moby@example.com
|
||||
COPy --from=base \
|
||||
/lint.Dockerfile \
|
||||
/
|
||||
|
||||
CMD [ "echo", "Hello, Norway!" ]
|
||||
CMD [ "echo", "Hello, Sweden!" ]
|
||||
ENTRYPOINT my-program start
|
||||
228
__tests__/fixtures/metadata.json
Normal file
228
__tests__/fixtures/metadata.json
Normal file
@@ -0,0 +1,228 @@
|
||||
{
|
||||
"buildx.build.provenance": {
|
||||
"buildType": "https://mobyproject.org/buildkit@v1",
|
||||
"materials": [
|
||||
{
|
||||
"uri": "pkg:docker/docker/dockerfile-upstream@master",
|
||||
"digest": {
|
||||
"sha256": "70433342168dafa34d11bd7236c3c3fcf448b90539733281711050808f32e835"
|
||||
}
|
||||
},
|
||||
{
|
||||
"uri": "pkg:docker/busybox@latest?platform=linux%2Famd64",
|
||||
"digest": {
|
||||
"sha256": "9ae97d36d26566ff84e8893c64a6dc4fe8ca6d1144bf5b87b2b85a32def253c7"
|
||||
}
|
||||
}
|
||||
],
|
||||
"invocation": {
|
||||
"configSource": {
|
||||
"entryPoint": "Dockerfile"
|
||||
},
|
||||
"parameters": {
|
||||
"frontend": "gateway.v0",
|
||||
"args": {
|
||||
"cmdline": "docker/dockerfile-upstream:master",
|
||||
"source": "docker/dockerfile-upstream:master"
|
||||
},
|
||||
"locals": [
|
||||
{
|
||||
"name": "context"
|
||||
},
|
||||
{
|
||||
"name": "dockerfile"
|
||||
}
|
||||
]
|
||||
},
|
||||
"environment": {
|
||||
"platform": "linux/amd64"
|
||||
}
|
||||
}
|
||||
},
|
||||
"buildx.build.ref": "default/default/n6ibcp9b2pw108rrz7ywdznvo",
|
||||
"buildx.build.warnings": [
|
||||
{
|
||||
"vertex": "sha256:7b477ac5dd3a4c4d2523f7f7f20406b626395de082f44fd5ff996323ec8257d0",
|
||||
"level": 1,
|
||||
"short": "Q29uc2lzdGVudEluc3RydWN0aW9uQ2FzaW5nOiBDb21tYW5kICdmck9NJyBzaG91bGQgYmUgY29uc2lzdGVudGx5IGNhc2VkIChsaW5lIDIp",
|
||||
"detail": [
|
||||
"SW5zdHJ1Y3Rpb25zIHNob3VsZCBiZSBpbiBjb25zaXN0ZW50IGNhc2luZyAoYWxsIGxvd2VyIG9yIGFsbCB1cHBlcik="
|
||||
],
|
||||
"url": "https://docs.docker.com/go/dockerfile/rule/consistent-instruction-casing/",
|
||||
"sourceInfo": {
|
||||
"filename": "Dockerfile",
|
||||
"data": "IyBzeW50YXg9ZG9ja2VyL2RvY2tlcmZpbGUtdXBzdHJlYW06bWFzdGVyCmZyT00gYnVzeWJveCBhcyBiYXNlCmNPcHkgRG9ja2VyZmlsZSAuCgpmcm9tIHNjcmF0Y2gKQ09QeSAtLWZyb209YmFzZSBcCiAgL0RvY2tlcmZpbGUgXAogIC8K",
|
||||
"definition": {
|
||||
"def": [
|
||||
"GsUBChJsb2NhbDovL2RvY2tlcmZpbGUSFAoMbG9jYWwuZGlmZmVyEgRub25lEkoKEWxvY2FsLmZvbGxvd3BhdGhzEjVbIkRvY2tlcmZpbGUiLCJEb2NrZXJmaWxlLmRvY2tlcmlnbm9yZSIsImRvY2tlcmZpbGUiXRIqCg1sb2NhbC5zZXNzaW9uEhkwN3A3MzJ6aGR4NXV1NnVsZDNzOGpteWo2EiEKE2xvY2FsLnNoYXJlZGtleWhpbnQSCmRvY2tlcmZpbGVaAA==",
|
||||
"CkkKR3NoYTI1Njo3YjQ3N2FjNWRkM2E0YzRkMjUyM2Y3ZjdmMjA0MDZiNjI2Mzk1ZGUwODJmNDRmZDVmZjk5NjMyM2VjODI1N2Qw"
|
||||
],
|
||||
"metadata": {
|
||||
"sha256:7b477ac5dd3a4c4d2523f7f7f20406b626395de082f44fd5ff996323ec8257d0": {
|
||||
"description": {
|
||||
"llb.customname": "[internal] load build definition from Dockerfile"
|
||||
},
|
||||
"caps": {
|
||||
"source.local": true,
|
||||
"source.local.followpaths": true,
|
||||
"source.local.sessionid": true,
|
||||
"source.local.sharedkeyhint": true
|
||||
}
|
||||
},
|
||||
"sha256:a06279dbe062a3b181c9b918abfaf37ca8106f1f9745b9d42356b3195b205cd1": {
|
||||
"caps": {
|
||||
"constraints": true,
|
||||
"meta.description": true,
|
||||
"platform": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"Source": {
|
||||
"locations": {
|
||||
"sha256:7b477ac5dd3a4c4d2523f7f7f20406b626395de082f44fd5ff996323ec8257d0": {}
|
||||
}
|
||||
}
|
||||
},
|
||||
"language": "Dockerfile"
|
||||
},
|
||||
"range": [
|
||||
{
|
||||
"start": {
|
||||
"line": 2
|
||||
},
|
||||
"end": {
|
||||
"line": 2
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"vertex": "sha256:7b477ac5dd3a4c4d2523f7f7f20406b626395de082f44fd5ff996323ec8257d0",
|
||||
"level": 1,
|
||||
"short": "Q29uc2lzdGVudEluc3RydWN0aW9uQ2FzaW5nOiBDb21tYW5kICdjT3B5JyBzaG91bGQgYmUgY29uc2lzdGVudGx5IGNhc2VkIChsaW5lIDMp",
|
||||
"detail": [
|
||||
"SW5zdHJ1Y3Rpb25zIHNob3VsZCBiZSBpbiBjb25zaXN0ZW50IGNhc2luZyAoYWxsIGxvd2VyIG9yIGFsbCB1cHBlcik="
|
||||
],
|
||||
"url": "https://docs.docker.com/go/dockerfile/rule/consistent-instruction-casing/",
|
||||
"sourceInfo": {
|
||||
"filename": "Dockerfile",
|
||||
"data": "IyBzeW50YXg9ZG9ja2VyL2RvY2tlcmZpbGUtdXBzdHJlYW06bWFzdGVyCmZyT00gYnVzeWJveCBhcyBiYXNlCmNPcHkgRG9ja2VyZmlsZSAuCgpmcm9tIHNjcmF0Y2gKQ09QeSAtLWZyb209YmFzZSBcCiAgL0RvY2tlcmZpbGUgXAogIC8K",
|
||||
"definition": {
|
||||
"def": [
|
||||
"GsUBChJsb2NhbDovL2RvY2tlcmZpbGUSFAoMbG9jYWwuZGlmZmVyEgRub25lEkoKEWxvY2FsLmZvbGxvd3BhdGhzEjVbIkRvY2tlcmZpbGUiLCJEb2NrZXJmaWxlLmRvY2tlcmlnbm9yZSIsImRvY2tlcmZpbGUiXRIqCg1sb2NhbC5zZXNzaW9uEhkwN3A3MzJ6aGR4NXV1NnVsZDNzOGpteWo2EiEKE2xvY2FsLnNoYXJlZGtleWhpbnQSCmRvY2tlcmZpbGVaAA==",
|
||||
"CkkKR3NoYTI1Njo3YjQ3N2FjNWRkM2E0YzRkMjUyM2Y3ZjdmMjA0MDZiNjI2Mzk1ZGUwODJmNDRmZDVmZjk5NjMyM2VjODI1N2Qw"
|
||||
],
|
||||
"metadata": {
|
||||
"sha256:7b477ac5dd3a4c4d2523f7f7f20406b626395de082f44fd5ff996323ec8257d0": {
|
||||
"description": {
|
||||
"llb.customname": "[internal] load build definition from Dockerfile"
|
||||
},
|
||||
"caps": {
|
||||
"source.local": true,
|
||||
"source.local.followpaths": true,
|
||||
"source.local.sessionid": true,
|
||||
"source.local.sharedkeyhint": true
|
||||
}
|
||||
},
|
||||
"sha256:a06279dbe062a3b181c9b918abfaf37ca8106f1f9745b9d42356b3195b205cd1": {
|
||||
"caps": {
|
||||
"constraints": true,
|
||||
"meta.description": true,
|
||||
"platform": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"Source": {
|
||||
"locations": {
|
||||
"sha256:7b477ac5dd3a4c4d2523f7f7f20406b626395de082f44fd5ff996323ec8257d0": {}
|
||||
}
|
||||
}
|
||||
},
|
||||
"language": "Dockerfile"
|
||||
},
|
||||
"range": [
|
||||
{
|
||||
"start": {
|
||||
"line": 3
|
||||
},
|
||||
"end": {
|
||||
"line": 3
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"vertex": "sha256:7b477ac5dd3a4c4d2523f7f7f20406b626395de082f44fd5ff996323ec8257d0",
|
||||
"level": 1,
|
||||
"short": "Q29uc2lzdGVudEluc3RydWN0aW9uQ2FzaW5nOiBDb21tYW5kICdDT1B5JyBzaG91bGQgYmUgY29uc2lzdGVudGx5IGNhc2VkIChsaW5lIDYp",
|
||||
"detail": [
|
||||
"SW5zdHJ1Y3Rpb25zIHNob3VsZCBiZSBpbiBjb25zaXN0ZW50IGNhc2luZyAoYWxsIGxvd2VyIG9yIGFsbCB1cHBlcik="
|
||||
],
|
||||
"url": "https://docs.docker.com/go/dockerfile/rule/consistent-instruction-casing/",
|
||||
"sourceInfo": {
|
||||
"filename": "Dockerfile",
|
||||
"data": "IyBzeW50YXg9ZG9ja2VyL2RvY2tlcmZpbGUtdXBzdHJlYW06bWFzdGVyCmZyT00gYnVzeWJveCBhcyBiYXNlCmNPcHkgRG9ja2VyZmlsZSAuCgpmcm9tIHNjcmF0Y2gKQ09QeSAtLWZyb209YmFzZSBcCiAgL0RvY2tlcmZpbGUgXAogIC8K",
|
||||
"definition": {
|
||||
"def": [
|
||||
"GsUBChJsb2NhbDovL2RvY2tlcmZpbGUSFAoMbG9jYWwuZGlmZmVyEgRub25lEkoKEWxvY2FsLmZvbGxvd3BhdGhzEjVbIkRvY2tlcmZpbGUiLCJEb2NrZXJmaWxlLmRvY2tlcmlnbm9yZSIsImRvY2tlcmZpbGUiXRIqCg1sb2NhbC5zZXNzaW9uEhkwN3A3MzJ6aGR4NXV1NnVsZDNzOGpteWo2EiEKE2xvY2FsLnNoYXJlZGtleWhpbnQSCmRvY2tlcmZpbGVaAA==",
|
||||
"CkkKR3NoYTI1Njo3YjQ3N2FjNWRkM2E0YzRkMjUyM2Y3ZjdmMjA0MDZiNjI2Mzk1ZGUwODJmNDRmZDVmZjk5NjMyM2VjODI1N2Qw"
|
||||
],
|
||||
"metadata": {
|
||||
"sha256:7b477ac5dd3a4c4d2523f7f7f20406b626395de082f44fd5ff996323ec8257d0": {
|
||||
"description": {
|
||||
"llb.customname": "[internal] load build definition from Dockerfile"
|
||||
},
|
||||
"caps": {
|
||||
"source.local": true,
|
||||
"source.local.followpaths": true,
|
||||
"source.local.sessionid": true,
|
||||
"source.local.sharedkeyhint": true
|
||||
}
|
||||
},
|
||||
"sha256:a06279dbe062a3b181c9b918abfaf37ca8106f1f9745b9d42356b3195b205cd1": {
|
||||
"caps": {
|
||||
"constraints": true,
|
||||
"meta.description": true,
|
||||
"platform": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"Source": {
|
||||
"locations": {
|
||||
"sha256:7b477ac5dd3a4c4d2523f7f7f20406b626395de082f44fd5ff996323ec8257d0": {}
|
||||
}
|
||||
}
|
||||
},
|
||||
"language": "Dockerfile"
|
||||
},
|
||||
"range": [
|
||||
{
|
||||
"start": {
|
||||
"line": 6
|
||||
},
|
||||
"end": {
|
||||
"line": 6
|
||||
}
|
||||
},
|
||||
{
|
||||
"start": {
|
||||
"line": 7
|
||||
},
|
||||
"end": {
|
||||
"line": 7
|
||||
}
|
||||
},
|
||||
{
|
||||
"start": {
|
||||
"line": 8
|
||||
},
|
||||
"end": {
|
||||
"line": 8
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"containerimage.config.digest": "sha256:059b68a595b22564a1cbc167f369349fdc2ecc1f7bc092c2235cbf601a795fd",
|
||||
"containerimage.digest": "sha256:b09b9482c72371486bb2c1d2c2a2633ed1d0b8389e12c8d52b9e052725c0c83c"
|
||||
}
|
||||
@@ -21,7 +21,6 @@ import {Exec} from '../src/exec';
|
||||
import {ExecOutput} from '@actions/exec';
|
||||
|
||||
beforeEach(() => {
|
||||
jest.clearAllMocks();
|
||||
jest.restoreAllMocks();
|
||||
});
|
||||
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
import {beforeEach, describe, expect, it, jest, test} from '@jest/globals';
|
||||
import {describe, expect, it, test} from '@jest/globals';
|
||||
import fs from 'fs';
|
||||
import * as path from 'path';
|
||||
|
||||
@@ -32,10 +32,6 @@ const tmpDir = path.join(process.env.TEMP || '/tmp', 'github-jest');
|
||||
|
||||
const maybe = !process.env.GITHUB_ACTIONS || (process.env.GITHUB_ACTIONS === 'true' && process.env.ImageOS && process.env.ImageOS.startsWith('ubuntu')) ? describe : describe.skip;
|
||||
|
||||
beforeEach(() => {
|
||||
jest.clearAllMocks();
|
||||
});
|
||||
|
||||
maybe('uploadArtifact', () => {
|
||||
it('uploads an artifact', async () => {
|
||||
const res = await GitHub.uploadArtifact({
|
||||
@@ -122,29 +118,20 @@ maybe('writeBuildSummary', () => {
|
||||
test.each([
|
||||
[
|
||||
'single',
|
||||
[
|
||||
'bake',
|
||||
'-f', path.join(fixturesDir, 'hello-bake.hcl'),
|
||||
'hello'
|
||||
],
|
||||
path.join(fixturesDir, 'hello-bake.hcl'),
|
||||
'hello'
|
||||
],
|
||||
[
|
||||
'group',
|
||||
[
|
||||
'bake',
|
||||
'-f', path.join(fixturesDir, 'hello-bake.hcl'),
|
||||
'hello-all'
|
||||
],
|
||||
path.join(fixturesDir, 'hello-bake.hcl'),
|
||||
'hello-all'
|
||||
],
|
||||
[
|
||||
'matrix',
|
||||
[
|
||||
'bake',
|
||||
'-f', path.join(fixturesDir, 'hello-bake.hcl'),
|
||||
'hello-matrix'
|
||||
],
|
||||
path.join(fixturesDir, 'hello-bake.hcl'),
|
||||
'hello-matrix'
|
||||
]
|
||||
])('write bake summary %p', async (_, bargs) => {
|
||||
])('write bake summary %p', async (_, file, target) => {
|
||||
const buildx = new Buildx();
|
||||
const bake = new Bake({buildx: buildx});
|
||||
|
||||
@@ -154,7 +141,9 @@ maybe('writeBuildSummary', () => {
|
||||
// prettier-ignore
|
||||
const buildCmd = await buildx.getCommand([
|
||||
'--builder', process.env.CTN_BUILDER_NAME ?? 'default',
|
||||
...bargs,
|
||||
'bake',
|
||||
'-f', file,
|
||||
target,
|
||||
'--metadata-file', bake.getMetadataFilePath()
|
||||
]);
|
||||
await Exec.exec(buildCmd.command, buildCmd.args, {
|
||||
@@ -163,6 +152,16 @@ maybe('writeBuildSummary', () => {
|
||||
})()
|
||||
).resolves.not.toThrow();
|
||||
|
||||
const definition = await bake.getDefinition(
|
||||
{
|
||||
files: [file],
|
||||
targets: [target],
|
||||
},
|
||||
{
|
||||
cwd: fixturesDir
|
||||
}
|
||||
);
|
||||
|
||||
const metadata = bake.resolveMetadata();
|
||||
expect(metadata).toBeDefined();
|
||||
const buildRefs = bake.resolveRefs(metadata);
|
||||
@@ -190,7 +189,100 @@ maybe('writeBuildSummary', () => {
|
||||
uploadRes: uploadRes,
|
||||
inputs: {
|
||||
files: path.join(fixturesDir, 'hello-bake.hcl')
|
||||
},
|
||||
bakeDefinition: definition
|
||||
});
|
||||
});
|
||||
|
||||
it('fails with dockerfile syntax issue', async () => {
|
||||
const startedTime = new Date();
|
||||
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-err.Dockerfile'),
|
||||
fixturesDir,
|
||||
'--metadata-file', build.getMetadataFilePath()
|
||||
]);
|
||||
await Exec.exec(buildCmd.command, buildCmd.args);
|
||||
})()
|
||||
).rejects.toThrow();
|
||||
|
||||
const refs = Buildx.refs({
|
||||
dir: Buildx.refsDir,
|
||||
builderName: process.env.CTN_BUILDER_NAME ?? 'default',
|
||||
since: startedTime
|
||||
});
|
||||
expect(refs).toBeDefined();
|
||||
expect(Object.keys(refs).length).toBeGreaterThan(0);
|
||||
|
||||
const history = new History({buildx: buildx});
|
||||
const exportRes = await history.export({
|
||||
refs: [Object.keys(refs)[0] ?? '']
|
||||
});
|
||||
expect(exportRes).toBeDefined();
|
||||
expect(exportRes?.dockerbuildFilename).toBeDefined();
|
||||
expect(exportRes?.dockerbuildSize).toBeDefined();
|
||||
expect(exportRes?.summaries).toBeDefined();
|
||||
|
||||
const uploadRes = await GitHub.uploadArtifact({
|
||||
filename: exportRes?.dockerbuildFilename,
|
||||
mimeType: 'application/gzip',
|
||||
retentionDays: 1
|
||||
});
|
||||
expect(uploadRes).toBeDefined();
|
||||
expect(uploadRes?.url).toBeDefined();
|
||||
|
||||
await GitHub.writeBuildSummary({
|
||||
exportRes: exportRes,
|
||||
uploadRes: uploadRes,
|
||||
inputs: {
|
||||
context: fixturesDir,
|
||||
file: path.join(fixturesDir, 'hello-err.Dockerfile')
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
maybe('annotateBuildWarnings', () => {
|
||||
it('annoate lint issues', 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, 'lint.Dockerfile'),
|
||||
fixturesDir,
|
||||
'--metadata-file', build.getMetadataFilePath()
|
||||
]);
|
||||
await Exec.exec(buildCmd.command, buildCmd.args, {
|
||||
env: Object.assign({}, process.env, {
|
||||
BUILDX_METADATA_WARNINGS: 'true'
|
||||
}) as {
|
||||
[key: string]: string;
|
||||
}
|
||||
});
|
||||
})()
|
||||
).resolves.not.toThrow();
|
||||
|
||||
const metadata = build.resolveMetadata();
|
||||
expect(metadata).toBeDefined();
|
||||
const buildRef = build.resolveRef(metadata);
|
||||
expect(buildRef).toBeDefined();
|
||||
const buildWarnings = build.resolveWarnings(metadata);
|
||||
expect(buildWarnings).toBeDefined();
|
||||
|
||||
await GitHub.annotateBuildWarnings(path.join(fixturesDir, 'lint.Dockerfile'), buildWarnings);
|
||||
});
|
||||
});
|
||||
|
||||
@@ -22,10 +22,6 @@ import * as core from '@actions/core';
|
||||
import {GitHub} from '../src/github';
|
||||
import {GitHubRepo} from '../src/types/github';
|
||||
|
||||
beforeEach(() => {
|
||||
jest.clearAllMocks();
|
||||
});
|
||||
|
||||
import repoFixture from './fixtures/github-repo.json';
|
||||
jest.spyOn(GitHub.prototype, 'repoData').mockImplementation((): Promise<GitHubRepo> => {
|
||||
return <Promise<GitHubRepo>>(repoFixture as unknown);
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
import {afterEach, beforeEach, describe, expect, jest, test} from '@jest/globals';
|
||||
import {afterEach, describe, expect, test} from '@jest/globals';
|
||||
import * as fs from 'fs';
|
||||
import path from 'path';
|
||||
import * as rimraf from 'rimraf';
|
||||
@@ -26,10 +26,6 @@ const fixturesDir = path.join(__dirname, '..', 'fixtures');
|
||||
// prettier-ignore
|
||||
const tmpDir = path.join(process.env.TEMP || '/tmp', 'docker-jest');
|
||||
|
||||
beforeEach(() => {
|
||||
jest.clearAllMocks();
|
||||
});
|
||||
|
||||
afterEach(function () {
|
||||
rimraf.sync(tmpDir);
|
||||
});
|
||||
|
||||
@@ -14,16 +14,12 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
import {beforeEach, describe, expect, it, jest, test} from '@jest/globals';
|
||||
import {describe, expect, it, test} from '@jest/globals';
|
||||
import * as fs from 'fs';
|
||||
import * as path from 'path';
|
||||
|
||||
import {Util} from '../src/util';
|
||||
|
||||
beforeEach(() => {
|
||||
jest.clearAllMocks();
|
||||
});
|
||||
|
||||
describe('getInputList', () => {
|
||||
it('single line correctly', async () => {
|
||||
await setInput('foo', 'bar');
|
||||
@@ -357,6 +353,69 @@ describe('generateRandomString', () => {
|
||||
});
|
||||
});
|
||||
|
||||
describe('stringToUnicodeEntities', () => {
|
||||
it('should convert a string to Unicode entities', () => {
|
||||
const input = 'Hello, World!';
|
||||
const expected = 'Hello, World!';
|
||||
const result = Util.stringToUnicodeEntities(input);
|
||||
expect(result).toEqual(expected);
|
||||
});
|
||||
it('should handle an empty string', () => {
|
||||
const input = '';
|
||||
const expected = '';
|
||||
const result = Util.stringToUnicodeEntities(input);
|
||||
expect(result).toEqual(expected);
|
||||
});
|
||||
it('should handle special characters', () => {
|
||||
const input = '@#^&*()';
|
||||
const expected = '@#^&*()';
|
||||
const result = Util.stringToUnicodeEntities(input);
|
||||
expect(result).toEqual(expected);
|
||||
});
|
||||
it('should handle non-English characters', () => {
|
||||
const input = 'こんにちは';
|
||||
const expected = 'こんにちは';
|
||||
const result = Util.stringToUnicodeEntities(input);
|
||||
expect(result).toEqual(expected);
|
||||
});
|
||||
});
|
||||
|
||||
describe('countLines', () => {
|
||||
it('counts total number of lines correctly', () => {
|
||||
const text = `This
|
||||
|
||||
is
|
||||
a
|
||||
sample
|
||||
|
||||
text
|
||||
with
|
||||
multiple
|
||||
lines`;
|
||||
|
||||
const result = Util.countLines(text);
|
||||
expect(result).toEqual(10); // Including empty lines
|
||||
});
|
||||
it('handles edge case with empty string', () => {
|
||||
const text = '';
|
||||
|
||||
const result = Util.countLines(text);
|
||||
expect(result).toEqual(1); // Empty string should have 1 line
|
||||
});
|
||||
it('handles edge case with single line', () => {
|
||||
const text = 'Single line text';
|
||||
|
||||
const result = Util.countLines(text);
|
||||
expect(result).toEqual(1); // Single line should have 1 line
|
||||
});
|
||||
it('handles multiple types of line breaks', () => {
|
||||
const text = `Line 1\r\nLine 2\rLine 3\nLine 4`;
|
||||
|
||||
const result = Util.countLines(text);
|
||||
expect(result).toEqual(4); // Different line break types should be counted correctly
|
||||
});
|
||||
});
|
||||
|
||||
// See: https://github.com/actions/toolkit/blob/a1b068ec31a042ff1e10a522d8fdf0b8869d53ca/packages/core/src/core.ts#L89
|
||||
function getInputName(name: string): string {
|
||||
return `INPUT_${name.replace(/ /g, '_').toUpperCase()}`;
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
|
||||
ARG NODE_VERSION=20
|
||||
ARG DOCKER_VERSION=26.0.2
|
||||
ARG BUILDX_VERSION=0.15.0
|
||||
ARG BUILDX_VERSION=0.15.1
|
||||
|
||||
FROM node:${NODE_VERSION}-alpine AS base
|
||||
RUN apk add --no-cache cpio findutils git
|
||||
|
||||
@@ -22,10 +22,6 @@ 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')
|
||||
}) as {
|
||||
@@ -33,7 +29,6 @@ process.env = Object.assign({}, process.env, {
|
||||
};
|
||||
|
||||
module.exports = {
|
||||
clearMocks: true,
|
||||
testEnvironment: 'node',
|
||||
moduleFileExtensions: ['js', 'ts'],
|
||||
setupFiles: ['dotenv/config'],
|
||||
|
||||
@@ -60,6 +60,7 @@
|
||||
"csv-parse": "^5.5.6",
|
||||
"gunzip-maybe": "^1.4.2",
|
||||
"handlebars": "^4.7.8",
|
||||
"he": "^1.2.0",
|
||||
"js-yaml": "^4.1.0",
|
||||
"jwt-decode": "^4.0.0",
|
||||
"semver": "^7.6.2",
|
||||
@@ -69,6 +70,7 @@
|
||||
"devDependencies": {
|
||||
"@types/csv-parse": "^1.2.2",
|
||||
"@types/gunzip-maybe": "^1.4.2",
|
||||
"@types/he": "^1.2.3",
|
||||
"@types/js-yaml": "^4.0.9",
|
||||
"@types/node": "^20.12.10",
|
||||
"@types/semver": "^7.5.8",
|
||||
|
||||
@@ -25,6 +25,8 @@ import {GitHub} from '../github';
|
||||
import {Util} from '../util';
|
||||
|
||||
import {BuildMetadata} from '../types/buildx/build';
|
||||
import {VertexWarning} from '../types/buildkit/client';
|
||||
import {ProvenancePredicate} from '../types/intoto/slsa_provenance/v0.2/provenance';
|
||||
|
||||
export interface BuildOpts {
|
||||
buildx?: Buildx;
|
||||
@@ -82,6 +84,32 @@ export class Build {
|
||||
return undefined;
|
||||
}
|
||||
|
||||
public resolveProvenance(metadata?: BuildMetadata): ProvenancePredicate | undefined {
|
||||
if (!metadata) {
|
||||
metadata = this.resolveMetadata();
|
||||
if (!metadata) {
|
||||
return undefined;
|
||||
}
|
||||
}
|
||||
if ('buildx.build.provenance' in metadata) {
|
||||
return metadata['buildx.build.provenance'] as ProvenancePredicate;
|
||||
}
|
||||
return undefined;
|
||||
}
|
||||
|
||||
public resolveWarnings(metadata?: BuildMetadata): Array<VertexWarning> | undefined {
|
||||
if (!metadata) {
|
||||
metadata = this.resolveMetadata();
|
||||
if (!metadata) {
|
||||
return undefined;
|
||||
}
|
||||
}
|
||||
if ('buildx.build.warnings' in metadata) {
|
||||
return metadata['buildx.build.warnings'] as Array<VertexWarning>;
|
||||
}
|
||||
return undefined;
|
||||
}
|
||||
|
||||
public resolveDigest(metadata?: BuildMetadata): string | undefined {
|
||||
if (!metadata) {
|
||||
metadata = this.resolveMetadata();
|
||||
|
||||
@@ -49,6 +49,9 @@ export class History {
|
||||
if (!(await Docker.isAvailable())) {
|
||||
throw new Error('Docker is required 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');
|
||||
}
|
||||
|
||||
let builderName: string = '';
|
||||
let nodeName: string = '';
|
||||
|
||||
127
src/github.ts
127
src/github.ts
@@ -16,11 +16,13 @@
|
||||
|
||||
import crypto from 'crypto';
|
||||
import fs from 'fs';
|
||||
import he from 'he';
|
||||
import jsyaml 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';
|
||||
@@ -35,6 +37,7 @@ import {jwtDecode, JwtPayload} from 'jwt-decode';
|
||||
|
||||
import {Util} from './util';
|
||||
|
||||
import {VertexWarning} from './types/buildkit/client';
|
||||
import {BuildSummaryOpts, GitHubActionsRuntimeToken, GitHubActionsRuntimeTokenAC, GitHubRepo, UploadArtifactOpts, UploadArtifactResponse} from './types/github';
|
||||
|
||||
export interface GitHubOpts {
|
||||
@@ -68,10 +71,18 @@ export class GitHub {
|
||||
return `${github.context.repo.owner}/${github.context.repo.repo}`;
|
||||
}
|
||||
|
||||
public static workflowRunURL(setAttempts?: boolean): string {
|
||||
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 `${GitHub.serverURL}/${GitHub.repository}/actions/runs/${github.context.runId}${setAttempts ? `/attempts/${process.env.GITHUB_RUN_ATTEMPT || 1}` : ''}`;
|
||||
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 {
|
||||
@@ -113,6 +124,10 @@ export class GitHub {
|
||||
}
|
||||
|
||||
public static async uploadArtifact(opts: UploadArtifactOpts): Promise<UploadArtifactResponse> {
|
||||
if (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();
|
||||
@@ -211,27 +226,33 @@ export class GitHub {
|
||||
|
||||
const refsSize = Object.keys(opts.exportRes.refs).length;
|
||||
|
||||
// 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('/')}`;
|
||||
|
||||
// prettier-ignore
|
||||
const sum = core.summary
|
||||
.addHeading('Docker Build summary', 1)
|
||||
.addHeading('Docker Build summary', 2)
|
||||
.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://docs.docker.com/go/build-summary/'))
|
||||
.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>')
|
||||
.addRaw(`<p>`)
|
||||
.addRaw(`:arrow_down: ${addLink(`<strong>${opts.uploadRes.filename}</strong>`, opts.uploadRes.url)} (${Util.formatFileSize(opts.uploadRes.size)})`)
|
||||
.addBreak()
|
||||
.addRaw(`This file includes <strong>${refsSize} build record${refsSize > 1 ? 's' : ''}</strong>.`)
|
||||
.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>`)
|
||||
.addRaw(`<p>`)
|
||||
.addRaw(`Find this useful? `)
|
||||
.addRaw(addLink('Let us know', 'https://docs.docker.com/feedback/gha-build-summary'))
|
||||
.addRaw('</p>');
|
||||
|
||||
sum.addHeading('Preview', 2);
|
||||
|
||||
// Preview
|
||||
sum.addRaw('<p>');
|
||||
const summaryTableData: Array<Array<SummaryTableCell>> = [
|
||||
[
|
||||
{header: true, data: 'ID'},
|
||||
@@ -241,44 +262,104 @@ export class GitHub {
|
||||
{header: true, data: 'Duration'}
|
||||
]
|
||||
];
|
||||
let summaryError: string | undefined;
|
||||
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>${summary.name}</strong>`},
|
||||
{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}
|
||||
]);
|
||||
if (summary.error) {
|
||||
summaryError = summary.error;
|
||||
buildError = summary.error;
|
||||
}
|
||||
}
|
||||
}
|
||||
sum.addTable([...summaryTableData]);
|
||||
if (summaryError) {
|
||||
sum.addHeading('Error', 4);
|
||||
sum.addCodeBlock(summaryError, 'text');
|
||||
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) {
|
||||
sum.addHeading('Build inputs', 2).addCodeBlock(
|
||||
jsyaml.dump(opts.inputs, {
|
||||
indent: 2,
|
||||
lineWidth: -1
|
||||
}),
|
||||
'yaml'
|
||||
);
|
||||
// prettier-ignore
|
||||
sum.addRaw(`<details><summary><strong>Build inputs</strong></summary>`)
|
||||
.addCodeBlock(
|
||||
jsyaml.dump(opts.inputs, {
|
||||
indent: 2,
|
||||
lineWidth: -1
|
||||
}), 'yaml'
|
||||
)
|
||||
.addRaw(`</details>`);
|
||||
}
|
||||
|
||||
// Bake definition
|
||||
if (opts.bakeDefinition) {
|
||||
sum.addHeading('Bake definition', 2).addCodeBlock(JSON.stringify(opts.bakeDefinition, null, 2), 'json');
|
||||
// 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();
|
||||
}
|
||||
|
||||
public static async annotateBuildWarnings(source: string, warnings?: Array<VertexWarning>): Promise<void> {
|
||||
(warnings ?? []).forEach(warning => {
|
||||
if (!warning.detail || !warning.short) {
|
||||
return;
|
||||
}
|
||||
const title = warning.detail.map(encoded => atob(encoded)).join(' ');
|
||||
let message = atob(warning.short).replace(/\s\(line \d+\)$/, '');
|
||||
if (warning.url) {
|
||||
// https://github.com/docker/buildx/blob/d8c9ebde1fdcf659f1fa3efa6ccc27a28b0f1564/commands/build.go#L854
|
||||
message += `\nMore info: ${warning.url}`;
|
||||
}
|
||||
|
||||
// GitHub annotations don't clearly show ranges of lines, so we'll just
|
||||
// show the first line
|
||||
const startLine = warning.range && warning.range.length > 0 ? warning.range[0]?.start.line : undefined;
|
||||
|
||||
// TODO: When GitHub annotations support showing ranges properly, we can use this code
|
||||
// let startLine: number | undefined, endLine: number | undefined;
|
||||
// for (const range of warning.range ?? []) {
|
||||
// if (range.start.line && (!startLine || range.start.line < startLine)) {
|
||||
// startLine = range.start.line;
|
||||
// }
|
||||
// if (range.end.line && (!endLine || range.end.line > endLine)) {
|
||||
// endLine = range.end.line;
|
||||
// }
|
||||
// }
|
||||
|
||||
core.warning(message, {
|
||||
title: title,
|
||||
file: source,
|
||||
startLine: startLine
|
||||
});
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
18
src/types/buildkit/buildkit.ts
Normal file
18
src/types/buildkit/buildkit.ts
Normal file
@@ -0,0 +1,18 @@
|
||||
/**
|
||||
* Copyright 2024 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.
|
||||
*/
|
||||
|
||||
// https://github.com/moby/buildkit/blob/v0.14.0/solver/llbsolver/history.go#L672
|
||||
export const MEDIATYPE_STATUS_V0 = 'application/vnd.buildkit.status.v0';
|
||||
78
src/types/buildkit/client.ts
Normal file
78
src/types/buildkit/client.ts
Normal file
@@ -0,0 +1,78 @@
|
||||
/**
|
||||
* Copyright 2024 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 {Digest} from '../oci/digest';
|
||||
import {ProgressGroup, Range, SourceInfo} from './ops';
|
||||
|
||||
// https://github.com/moby/buildkit/blob/v0.14.0/client/graph.go#L10-L19
|
||||
export interface Vertex {
|
||||
digest?: Digest;
|
||||
inputs?: Array<Digest>;
|
||||
name?: string;
|
||||
started?: Date;
|
||||
completed?: Date;
|
||||
cached?: boolean;
|
||||
error?: string;
|
||||
progressGroup?: ProgressGroup;
|
||||
}
|
||||
|
||||
// https://github.com/moby/buildkit/blob/v0.14.0/client/graph.go#L21-L30
|
||||
export interface VertexStatus {
|
||||
id: string;
|
||||
vertex?: Digest;
|
||||
name?: string;
|
||||
total?: number;
|
||||
current: number;
|
||||
timestamp?: Date;
|
||||
started?: Date;
|
||||
completed?: Date;
|
||||
}
|
||||
|
||||
// https://github.com/moby/buildkit/blob/v0.14.0/client/graph.go#L32-L37
|
||||
export interface VertexLog {
|
||||
vertex?: Digest;
|
||||
stream?: number;
|
||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||
data: any;
|
||||
timestamp: Date;
|
||||
}
|
||||
|
||||
// https://github.com/moby/buildkit/blob/v0.14.0/client/graph.go#L39-L48
|
||||
export interface VertexWarning {
|
||||
vertex?: Digest;
|
||||
level?: number;
|
||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||
short?: any;
|
||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||
detail?: Array<any>;
|
||||
url?: string;
|
||||
|
||||
sourceInfo?: SourceInfo;
|
||||
range?: Array<Range>;
|
||||
}
|
||||
|
||||
// https://github.com/moby/buildkit/blob/v0.14.0/client/graph.go#L50-L55
|
||||
export interface SolveStatus {
|
||||
vertexes?: Array<Vertex>;
|
||||
statuses?: Array<VertexStatus>;
|
||||
logs?: Array<VertexLog>;
|
||||
warnings?: Array<VertexWarning>;
|
||||
}
|
||||
|
||||
// https://github.com/moby/buildkit/blob/v0.14.0/client/graph.go#L57-L60
|
||||
export interface SolveResponse {
|
||||
exporterResponse: Record<string, string>;
|
||||
}
|
||||
108
src/types/buildkit/control.ts
Normal file
108
src/types/buildkit/control.ts
Normal file
@@ -0,0 +1,108 @@
|
||||
/**
|
||||
* Copyright 2024 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 {Descriptor} from '../oci/descriptor';
|
||||
import {Digest} from '../oci/digest';
|
||||
import {ProgressGroup, Range, SourceInfo} from './ops';
|
||||
import {RpcStatus} from './rpc';
|
||||
|
||||
// https://github.com/moby/buildkit/blob/v0.14.0/api/services/control/control.pb.go#L1504-L1525
|
||||
export interface BuildHistoryRecord {
|
||||
Ref: string;
|
||||
Frontend: string;
|
||||
FrontendAttrs: Record<string, string>;
|
||||
Exporters: Array<Exporter>;
|
||||
error?: RpcStatus;
|
||||
CreatedAt?: Date;
|
||||
CompletedAt?: Date;
|
||||
logs?: Descriptor;
|
||||
ExporterResponse: Record<string, string>;
|
||||
Result?: BuildResultInfo;
|
||||
Results: Record<string, BuildResultInfo>;
|
||||
Generation: number;
|
||||
trace?: Descriptor;
|
||||
pinned: boolean;
|
||||
numCachedSteps: number;
|
||||
numTotalSteps: number;
|
||||
numCompletedSteps: number;
|
||||
}
|
||||
|
||||
// https://github.com/moby/buildkit/blob/v0.14.0/api/services/control/control.pb.go#L1909-L1917
|
||||
export interface Exporter {
|
||||
Type: string;
|
||||
Attrs: Record<string, string>;
|
||||
}
|
||||
|
||||
// https://github.com/moby/buildkit/blob/v0.14.0/api/services/control/control.pb.go#L1845-L1852
|
||||
export interface BuildResultInfo {
|
||||
ResultDeprecated?: Descriptor;
|
||||
Attestations?: Array<Descriptor>;
|
||||
Results?: Record<number, Descriptor>;
|
||||
}
|
||||
|
||||
// https://github.com/moby/buildkit/blob/v0.14.0/api/services/control/control.pb.go#L751-L759
|
||||
export interface StatusResponse {
|
||||
vertexes?: Array<Vertex>;
|
||||
statuses?: Array<VertexStatus>;
|
||||
logs?: Array<VertexLog>;
|
||||
warnings?: Array<VertexWarning>;
|
||||
}
|
||||
|
||||
// https://github.com/moby/buildkit/blob/v0.14.0/api/services/control/control.pb.go#L822-L834
|
||||
export interface Vertex {
|
||||
digest: Digest;
|
||||
inputs: Array<Digest>;
|
||||
name?: string;
|
||||
cached?: boolean;
|
||||
started?: Date;
|
||||
completed?: Date;
|
||||
error?: string;
|
||||
progressGroup?: ProgressGroup;
|
||||
}
|
||||
|
||||
// https://github.com/moby/buildkit/blob/v0.14.0/api/services/control/control.pb.go#L911-L923
|
||||
export interface VertexStatus {
|
||||
ID?: string;
|
||||
vertex: Digest;
|
||||
name?: string;
|
||||
current?: number;
|
||||
total?: number;
|
||||
timestamp: Date;
|
||||
started?: Date;
|
||||
completed?: Date;
|
||||
}
|
||||
|
||||
// https://github.com/moby/buildkit/blob/v0.14.0/api/services/control/control.pb.go#L1007-L1015
|
||||
export interface VertexLog {
|
||||
vertex: Digest;
|
||||
timestamp: Date;
|
||||
stream?: number;
|
||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||
msg?: any;
|
||||
}
|
||||
|
||||
// https://github.com/moby/buildkit/blob/v0.14.0/api/services/control/control.pb.go#L1071-L1082
|
||||
export interface VertexWarning {
|
||||
vertex: Digest;
|
||||
level?: number;
|
||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||
short?: any;
|
||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||
detail?: Array<any>;
|
||||
url?: string;
|
||||
info?: SourceInfo;
|
||||
ranges?: Array<Range>;
|
||||
}
|
||||
82
src/types/buildkit/ops.ts
Normal file
82
src/types/buildkit/ops.ts
Normal file
@@ -0,0 +1,82 @@
|
||||
/**
|
||||
* Copyright 2024 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.
|
||||
*/
|
||||
|
||||
// https://github.com/moby/buildkit/blob/v0.14.0/solver/pb/ops.pb.go#L1901-L1909
|
||||
export interface Definition {
|
||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||
def?: Array<any>;
|
||||
metadata: Record<string, OpMetadata>;
|
||||
Source?: Source;
|
||||
}
|
||||
|
||||
// https://github.com/moby/buildkit/blob/v0.14.0/solver/pb/ops.pb.go#L1313-L1323
|
||||
export interface OpMetadata {
|
||||
ignore_cache?: boolean;
|
||||
description?: Record<string, string>;
|
||||
export_cache?: ExportCache;
|
||||
caps: Record<string, boolean>;
|
||||
progress_group?: ProgressGroup;
|
||||
}
|
||||
|
||||
// https://github.com/moby/buildkit/blob/v0.14.0/solver/pb/ops.pb.go#L1390-L1393
|
||||
export interface Source {
|
||||
locations?: Record<string, Locations>;
|
||||
infos?: Array<SourceInfo>;
|
||||
}
|
||||
|
||||
// https://github.com/moby/buildkit/blob/v0.14.0/solver/pb/ops.pb.go#L1439-L1441
|
||||
export interface Locations {
|
||||
locations?: Array<Location>;
|
||||
}
|
||||
|
||||
// https://github.com/moby/buildkit/blob/v0.14.0/solver/pb/ops.pb.go#L1545-L1548
|
||||
export interface Location {
|
||||
sourceIndex?: number;
|
||||
ranges?: Array<Range>;
|
||||
}
|
||||
|
||||
// https://github.com/moby/buildkit/blob/v0.14.0/solver/pb/ops.pb.go#L1594-L1597
|
||||
export interface Range {
|
||||
start: Position;
|
||||
end: Position;
|
||||
}
|
||||
|
||||
// https://github.com/moby/buildkit/blob/v0.14.0/solver/pb/ops.pb.go#L1643-L1646
|
||||
export interface Position {
|
||||
line: number;
|
||||
character: number;
|
||||
}
|
||||
|
||||
// https://github.com/moby/buildkit/blob/v0.14.0/solver/pb/ops.pb.go#L1480-L1485
|
||||
export interface SourceInfo {
|
||||
filename?: string;
|
||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||
data?: any;
|
||||
definition?: Definition;
|
||||
language?: string;
|
||||
}
|
||||
|
||||
// https://github.com/moby/buildkit/blob/v0.14.0/solver/pb/ops.pb.go#L1691-L1693
|
||||
export interface ExportCache {
|
||||
Value?: boolean;
|
||||
}
|
||||
|
||||
// https://github.com/moby/buildkit/blob/v0.14.0/solver/pb/ops.pb.go#L1731-L1735
|
||||
export interface ProgressGroup {
|
||||
id?: string;
|
||||
name?: string;
|
||||
weak?: boolean;
|
||||
}
|
||||
31
src/types/buildkit/rpc.ts
Normal file
31
src/types/buildkit/rpc.ts
Normal file
@@ -0,0 +1,31 @@
|
||||
/**
|
||||
* Copyright 2024 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.
|
||||
*/
|
||||
|
||||
// https://github.com/moby/buildkit/blob/v0.14.0/vendor/github.com/gogo/googleapis/google/rpc/status.pb.go#L36-L49
|
||||
export interface RpcStatus {
|
||||
code: number;
|
||||
message: string;
|
||||
details: Array<RpcAny>;
|
||||
}
|
||||
|
||||
// https://github.com/moby/buildkit/blob/v0.14.0/vendor/github.com/gogo/protobuf/types/any.pb.go#L108-L143
|
||||
// Define properties based on google.protobuf.Any. For simplicity, assuming it
|
||||
// has at least a type_url and a value.
|
||||
export interface RpcAny {
|
||||
type_url: string;
|
||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||
value: any;
|
||||
}
|
||||
@@ -15,5 +15,6 @@
|
||||
*/
|
||||
|
||||
export type BuildMetadata = {
|
||||
[key: string]: string;
|
||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||
[key: string]: any;
|
||||
};
|
||||
|
||||
20
src/types/intoto/intoto.ts
Normal file
20
src/types/intoto/intoto.ts
Normal file
@@ -0,0 +1,20 @@
|
||||
/**
|
||||
* Copyright 2024 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.
|
||||
*/
|
||||
|
||||
// https://github.com/in-toto/in-toto-golang/blob/dd6278764ab1dae7301609c7510129888e2fd569/in_toto/envelope.go#L17
|
||||
export const MEDIATYPE_PAYLOAD = 'application/vnd.in-toto+json';
|
||||
|
||||
export const MEDIATYPE_PREDICATE = 'in-toto.io/predicate-type';
|
||||
69
src/types/intoto/slsa_provenance/v0.2/provenance.ts
Normal file
69
src/types/intoto/slsa_provenance/v0.2/provenance.ts
Normal file
@@ -0,0 +1,69 @@
|
||||
/**
|
||||
* Copyright 2024 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.
|
||||
*/
|
||||
|
||||
// https://github.com/in-toto/in-toto-golang/blob/master/in_toto/slsa_provenance/v0.2/provenance.go
|
||||
|
||||
export const PREDICATE_SLSA_PROVENANCE = 'https://slsa.dev/provenance/v0.2';
|
||||
|
||||
export interface ProvenancePredicate {
|
||||
builder: ProvenanceBuilder;
|
||||
buildType: string;
|
||||
invocation?: ProvenanceInvocation;
|
||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||
buildConfig?: any;
|
||||
metadata: ProvenanceMetadata;
|
||||
materials?: Material[];
|
||||
}
|
||||
|
||||
export interface ProvenanceBuilder {
|
||||
id: string;
|
||||
}
|
||||
|
||||
export interface ProvenanceInvocation {
|
||||
configSource?: ConfigSource;
|
||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||
parameters?: any;
|
||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||
environment?: any;
|
||||
}
|
||||
|
||||
export interface DigestSet {
|
||||
[key: string]: string;
|
||||
}
|
||||
|
||||
export interface ConfigSource {
|
||||
uri?: string;
|
||||
digest?: DigestSet;
|
||||
entryPoint?: string;
|
||||
}
|
||||
|
||||
export interface Completeness {
|
||||
parameters?: boolean;
|
||||
environment?: boolean;
|
||||
materials?: boolean;
|
||||
}
|
||||
|
||||
export interface ProvenanceMetadata {
|
||||
buildInvocationId?: string;
|
||||
buildStartedOn?: string;
|
||||
completeness?: Completeness;
|
||||
reproducible?: boolean;
|
||||
}
|
||||
|
||||
export interface Material {
|
||||
uri: string;
|
||||
digest: DigestSet;
|
||||
}
|
||||
10
src/util.ts
10
src/util.ts
@@ -179,4 +179,14 @@ export class Util {
|
||||
const bytes = crypto.randomBytes(Math.ceil(length / 2));
|
||||
return bytes.toString('hex').slice(0, length);
|
||||
}
|
||||
|
||||
public static stringToUnicodeEntities(str: string) {
|
||||
return Array.from(str)
|
||||
.map(char => `&#x${char.charCodeAt(0).toString(16)};`)
|
||||
.join('');
|
||||
}
|
||||
|
||||
public static countLines(input: string): number {
|
||||
return input.split(/\r\n|\r|\n/).length;
|
||||
}
|
||||
}
|
||||
|
||||
18
yarn.lock
18
yarn.lock
@@ -1112,6 +1112,7 @@ __metadata:
|
||||
"@octokit/plugin-rest-endpoint-methods": ^10.4.0
|
||||
"@types/csv-parse": ^1.2.2
|
||||
"@types/gunzip-maybe": ^1.4.2
|
||||
"@types/he": ^1.2.3
|
||||
"@types/js-yaml": ^4.0.9
|
||||
"@types/node": ^20.12.10
|
||||
"@types/semver": ^7.5.8
|
||||
@@ -1129,6 +1130,7 @@ __metadata:
|
||||
eslint-plugin-prettier: ^5.1.3
|
||||
gunzip-maybe: ^1.4.2
|
||||
handlebars: ^4.7.8
|
||||
he: ^1.2.0
|
||||
jest: ^29.7.0
|
||||
js-yaml: ^4.1.0
|
||||
jwt-decode: ^4.0.0
|
||||
@@ -2175,6 +2177,13 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@types/he@npm:^1.2.3":
|
||||
version: 1.2.3
|
||||
resolution: "@types/he@npm:1.2.3"
|
||||
checksum: e77851c73dd7b9902d92fe0118a26246a7f3676a3a1c6eb1408305187ef73b57c22550b1435946b983267f961d935554d5d0e1b458416932552f31e763e1aa41
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@types/istanbul-lib-coverage@npm:*, @types/istanbul-lib-coverage@npm:^2.0.0, @types/istanbul-lib-coverage@npm:^2.0.1":
|
||||
version: 2.0.3
|
||||
resolution: "@types/istanbul-lib-coverage@npm:2.0.3"
|
||||
@@ -4923,6 +4932,15 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"he@npm:^1.2.0":
|
||||
version: 1.2.0
|
||||
resolution: "he@npm:1.2.0"
|
||||
bin:
|
||||
he: bin/he
|
||||
checksum: 3d4d6babccccd79c5c5a3f929a68af33360d6445587d628087f39a965079d84f18ce9c3d3f917ee1e3978916fc833bb8b29377c3b403f919426f91bc6965e7a7
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"html-escaper@npm:^2.0.0":
|
||||
version: 2.0.2
|
||||
resolution: "html-escaper@npm:2.0.2"
|
||||
|
||||
Reference in New Issue
Block a user