Compare commits
51 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
5205f4197c | ||
|
|
c76674dd4a | ||
|
|
8471422135 | ||
|
|
e266e3e984 | ||
|
|
1b7201d572 | ||
|
|
6983a397f4 | ||
|
|
81e959d041 | ||
|
|
475cefa34e | ||
|
|
c14688a151 | ||
|
|
dde9860104 | ||
|
|
ee6e7bbd95 | ||
|
|
fe58cc26f5 | ||
|
|
1bf4b58db1 | ||
|
|
82d10009f7 | ||
|
|
bf985d0056 | ||
|
|
129955ee04 | ||
|
|
6d74aad91b | ||
|
|
24546185f6 | ||
|
|
1b5c574732 | ||
|
|
2ace0cd1f7 | ||
|
|
33d4b448ac | ||
|
|
ee91773603 | ||
|
|
5186ba6fdf | ||
|
|
1309d2023e | ||
|
|
6a4479ebc2 | ||
|
|
cd9f97a8c5 | ||
|
|
65f5b77696 | ||
|
|
9ba5af418c | ||
|
|
93ae2ded04 | ||
|
|
15788e8b93 | ||
|
|
92053e1988 | ||
|
|
6d856fd53e | ||
|
|
e67313ac6d | ||
|
|
881230f4b0 | ||
|
|
6fb52d2a23 | ||
|
|
2941f52b66 | ||
|
|
760d0c2369 | ||
|
|
d344961874 | ||
|
|
5958c823ef | ||
|
|
a033bb70cd | ||
|
|
8f8c0bb7ec | ||
|
|
0903e498a4 | ||
|
|
1e903f84b6 | ||
|
|
3a2e4a89a6 | ||
|
|
b3dc87c0e0 | ||
|
|
bd1955c564 | ||
|
|
956acbf3c6 | ||
|
|
ea36deec7f | ||
|
|
9d829e4f4a | ||
|
|
66c00b9bbd | ||
|
|
448f9ac218 |
1
.gitattributes
vendored
1
.gitattributes
vendored
@@ -1,2 +1,3 @@
|
|||||||
/.yarn/releases/** binary
|
/.yarn/releases/** binary
|
||||||
/.yarn/plugins/** binary
|
/.yarn/plugins/** binary
|
||||||
|
/__tests__/fixtures/oci-archive/** binary
|
||||||
|
|||||||
115
.github/buildx-lab-releases.json
vendored
115
.github/buildx-lab-releases.json
vendored
@@ -1,43 +1,84 @@
|
|||||||
{
|
{
|
||||||
"latest": {
|
"latest": {
|
||||||
"id": 155523887,
|
"id": 157588052,
|
||||||
"tag_name": "v0.14.0-desktop.1",
|
"tag_name": "v0.14.1-desktop.1",
|
||||||
"html_url": "https://github.com/docker/buildx-desktop/releases/tag/v0.14.0-desktop.1",
|
"html_url": "https://github.com/docker/buildx-desktop/releases/tag/v0.14.1-desktop.1",
|
||||||
"assets": [
|
"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.1-desktop.1/buildx-v0.14.1-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.1-desktop.1/buildx-v0.14.1-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.1-desktop.1/buildx-v0.14.1-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.1-desktop.1/buildx-v0.14.1-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.1-desktop.1/buildx-v0.14.1-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.1-desktop.1/buildx-v0.14.1-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.1-desktop.1/buildx-v0.14.1-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.1-desktop.1/buildx-v0.14.1-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.1-desktop.1/buildx-v0.14.1-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.1-desktop.1/buildx-v0.14.1-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.1-desktop.1/buildx-v0.14.1-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.1-desktop.1/buildx-v0.14.1-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.1-desktop.1/buildx-v0.14.1-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.1-desktop.1/buildx-v0.14.1-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.1-desktop.1/buildx-v0.14.1-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.1-desktop.1/buildx-v0.14.1-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.1-desktop.1/buildx-v0.14.1-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.1-desktop.1/buildx-v0.14.1-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.1-desktop.1/buildx-v0.14.1-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.1-desktop.1/buildx-v0.14.1-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.1-desktop.1/buildx-v0.14.1-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.1-desktop.1/buildx-v0.14.1-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.1-desktop.1/buildx-v0.14.1-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.1-desktop.1/buildx-v0.14.1-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.1-desktop.1/buildx-v0.14.1-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.1-desktop.1/buildx-v0.14.1-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.1-desktop.1/buildx-v0.14.1-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.1-desktop.1/buildx-v0.14.1-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.1-desktop.1/buildx-v0.14.1-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.1-desktop.1/buildx-v0.14.1-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.1-desktop.1/buildx-v0.14.1-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.1-desktop.1/buildx-v0.14.1-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.1-desktop.1/buildx-v0.14.1-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/checksums.txt"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"v0.14.1-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.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.14.0-desktop.1": {
|
"v0.14.0-desktop.1": {
|
||||||
|
|||||||
238
.github/buildx-releases.json
vendored
238
.github/buildx-releases.json
vendored
@@ -1,43 +1,207 @@
|
|||||||
{
|
{
|
||||||
"latest": {
|
"latest": {
|
||||||
"id": 151768856,
|
"id": 159941316,
|
||||||
"tag_name": "v0.14.0",
|
"tag_name": "v0.15.0",
|
||||||
"html_url": "https://github.com/docker/buildx/releases/tag/v0.14.0",
|
"html_url": "https://github.com/docker/buildx/releases/tag/v0.15.0",
|
||||||
"assets": [
|
"assets": [
|
||||||
"https://github.com/docker/buildx/releases/download/v0.14.0/buildx-v0.14.0.darwin-amd64",
|
"https://github.com/docker/buildx/releases/download/v0.15.0/buildx-v0.15.0.darwin-amd64",
|
||||||
"https://github.com/docker/buildx/releases/download/v0.14.0/buildx-v0.14.0.darwin-amd64.provenance.json",
|
"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.14.0/buildx-v0.14.0.darwin-amd64.sbom.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.14.0/buildx-v0.14.0.darwin-arm64",
|
"https://github.com/docker/buildx/releases/download/v0.15.0/buildx-v0.15.0.darwin-arm64",
|
||||||
"https://github.com/docker/buildx/releases/download/v0.14.0/buildx-v0.14.0.darwin-arm64.provenance.json",
|
"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.14.0/buildx-v0.14.0.darwin-arm64.sbom.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.14.0/buildx-v0.14.0.linux-amd64",
|
"https://github.com/docker/buildx/releases/download/v0.15.0/buildx-v0.15.0.linux-amd64",
|
||||||
"https://github.com/docker/buildx/releases/download/v0.14.0/buildx-v0.14.0.linux-amd64.provenance.json",
|
"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.14.0/buildx-v0.14.0.linux-amd64.sbom.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.14.0/buildx-v0.14.0.linux-arm-v6",
|
"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.14.0/buildx-v0.14.0.linux-arm-v6.provenance.json",
|
"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.14.0/buildx-v0.14.0.linux-arm-v6.sbom.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.14.0/buildx-v0.14.0.linux-arm-v7",
|
"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.14.0/buildx-v0.14.0.linux-arm-v7.provenance.json",
|
"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.14.0/buildx-v0.14.0.linux-arm-v7.sbom.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.14.0/buildx-v0.14.0.linux-arm64",
|
"https://github.com/docker/buildx/releases/download/v0.15.0/buildx-v0.15.0.linux-arm64",
|
||||||
"https://github.com/docker/buildx/releases/download/v0.14.0/buildx-v0.14.0.linux-arm64.provenance.json",
|
"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.14.0/buildx-v0.14.0.linux-arm64.sbom.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.14.0/buildx-v0.14.0.linux-ppc64le",
|
"https://github.com/docker/buildx/releases/download/v0.15.0/buildx-v0.15.0.linux-ppc64le",
|
||||||
"https://github.com/docker/buildx/releases/download/v0.14.0/buildx-v0.14.0.linux-ppc64le.provenance.json",
|
"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.14.0/buildx-v0.14.0.linux-ppc64le.sbom.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.14.0/buildx-v0.14.0.linux-riscv64",
|
"https://github.com/docker/buildx/releases/download/v0.15.0/buildx-v0.15.0.linux-riscv64",
|
||||||
"https://github.com/docker/buildx/releases/download/v0.14.0/buildx-v0.14.0.linux-riscv64.provenance.json",
|
"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.14.0/buildx-v0.14.0.linux-riscv64.sbom.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.14.0/buildx-v0.14.0.linux-s390x",
|
"https://github.com/docker/buildx/releases/download/v0.15.0/buildx-v0.15.0.linux-s390x",
|
||||||
"https://github.com/docker/buildx/releases/download/v0.14.0/buildx-v0.14.0.linux-s390x.provenance.json",
|
"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.14.0/buildx-v0.14.0.linux-s390x.sbom.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.14.0/buildx-v0.14.0.windows-amd64.exe",
|
"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.14.0/buildx-v0.14.0.windows-amd64.provenance.json",
|
"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.14.0/buildx-v0.14.0.windows-amd64.sbom.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.14.0/buildx-v0.14.0.windows-arm64.exe",
|
"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.14.0/buildx-v0.14.0.windows-arm64.provenance.json",
|
"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.14.0/buildx-v0.14.0.windows-arm64.sbom.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.14.0/checksums.txt"
|
"https://github.com/docker/buildx/releases/download/v0.15.0/checksums.txt"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"v0.15.0": {
|
||||||
|
"id": 159941316,
|
||||||
|
"tag_name": "v0.15.0",
|
||||||
|
"html_url": "https://github.com/docker/buildx/releases/tag/v0.15.0",
|
||||||
|
"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"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"v0.15.0-rc2": {
|
||||||
|
"id": 159285616,
|
||||||
|
"tag_name": "v0.15.0-rc2",
|
||||||
|
"html_url": "https://github.com/docker/buildx/releases/tag/v0.15.0-rc2",
|
||||||
|
"assets": [
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.15.0-rc2/buildx-v0.15.0-rc2.darwin-amd64",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.15.0-rc2/buildx-v0.15.0-rc2.darwin-amd64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.15.0-rc2/buildx-v0.15.0-rc2.darwin-amd64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.15.0-rc2/buildx-v0.15.0-rc2.darwin-arm64",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.15.0-rc2/buildx-v0.15.0-rc2.darwin-arm64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.15.0-rc2/buildx-v0.15.0-rc2.darwin-arm64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.15.0-rc2/buildx-v0.15.0-rc2.linux-amd64",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.15.0-rc2/buildx-v0.15.0-rc2.linux-amd64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.15.0-rc2/buildx-v0.15.0-rc2.linux-amd64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.15.0-rc2/buildx-v0.15.0-rc2.linux-arm-v6",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.15.0-rc2/buildx-v0.15.0-rc2.linux-arm-v6.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.15.0-rc2/buildx-v0.15.0-rc2.linux-arm-v6.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.15.0-rc2/buildx-v0.15.0-rc2.linux-arm-v7",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.15.0-rc2/buildx-v0.15.0-rc2.linux-arm-v7.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.15.0-rc2/buildx-v0.15.0-rc2.linux-arm-v7.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.15.0-rc2/buildx-v0.15.0-rc2.linux-arm64",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.15.0-rc2/buildx-v0.15.0-rc2.linux-arm64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.15.0-rc2/buildx-v0.15.0-rc2.linux-arm64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.15.0-rc2/buildx-v0.15.0-rc2.linux-ppc64le",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.15.0-rc2/buildx-v0.15.0-rc2.linux-ppc64le.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.15.0-rc2/buildx-v0.15.0-rc2.linux-ppc64le.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.15.0-rc2/buildx-v0.15.0-rc2.linux-riscv64",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.15.0-rc2/buildx-v0.15.0-rc2.linux-riscv64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.15.0-rc2/buildx-v0.15.0-rc2.linux-riscv64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.15.0-rc2/buildx-v0.15.0-rc2.linux-s390x",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.15.0-rc2/buildx-v0.15.0-rc2.linux-s390x.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.15.0-rc2/buildx-v0.15.0-rc2.linux-s390x.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.15.0-rc2/buildx-v0.15.0-rc2.windows-amd64.exe",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.15.0-rc2/buildx-v0.15.0-rc2.windows-amd64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.15.0-rc2/buildx-v0.15.0-rc2.windows-amd64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.15.0-rc2/buildx-v0.15.0-rc2.windows-arm64.exe",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.15.0-rc2/buildx-v0.15.0-rc2.windows-arm64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.15.0-rc2/buildx-v0.15.0-rc2.windows-arm64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.15.0-rc2/checksums.txt"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"v0.15.0-rc1": {
|
||||||
|
"id": 158684634,
|
||||||
|
"tag_name": "v0.15.0-rc1",
|
||||||
|
"html_url": "https://github.com/docker/buildx/releases/tag/v0.15.0-rc1",
|
||||||
|
"assets": [
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.15.0-rc1/buildx-v0.15.0-rc1.darwin-amd64",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.15.0-rc1/buildx-v0.15.0-rc1.darwin-amd64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.15.0-rc1/buildx-v0.15.0-rc1.darwin-amd64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.15.0-rc1/buildx-v0.15.0-rc1.darwin-arm64",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.15.0-rc1/buildx-v0.15.0-rc1.darwin-arm64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.15.0-rc1/buildx-v0.15.0-rc1.darwin-arm64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.15.0-rc1/buildx-v0.15.0-rc1.linux-amd64",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.15.0-rc1/buildx-v0.15.0-rc1.linux-amd64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.15.0-rc1/buildx-v0.15.0-rc1.linux-amd64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.15.0-rc1/buildx-v0.15.0-rc1.linux-arm-v6",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.15.0-rc1/buildx-v0.15.0-rc1.linux-arm-v6.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.15.0-rc1/buildx-v0.15.0-rc1.linux-arm-v6.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.15.0-rc1/buildx-v0.15.0-rc1.linux-arm-v7",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.15.0-rc1/buildx-v0.15.0-rc1.linux-arm-v7.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.15.0-rc1/buildx-v0.15.0-rc1.linux-arm-v7.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.15.0-rc1/buildx-v0.15.0-rc1.linux-arm64",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.15.0-rc1/buildx-v0.15.0-rc1.linux-arm64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.15.0-rc1/buildx-v0.15.0-rc1.linux-arm64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.15.0-rc1/buildx-v0.15.0-rc1.linux-ppc64le",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.15.0-rc1/buildx-v0.15.0-rc1.linux-ppc64le.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.15.0-rc1/buildx-v0.15.0-rc1.linux-ppc64le.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.15.0-rc1/buildx-v0.15.0-rc1.linux-riscv64",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.15.0-rc1/buildx-v0.15.0-rc1.linux-riscv64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.15.0-rc1/buildx-v0.15.0-rc1.linux-riscv64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.15.0-rc1/buildx-v0.15.0-rc1.linux-s390x",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.15.0-rc1/buildx-v0.15.0-rc1.linux-s390x.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.15.0-rc1/buildx-v0.15.0-rc1.linux-s390x.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.15.0-rc1/buildx-v0.15.0-rc1.windows-amd64.exe",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.15.0-rc1/buildx-v0.15.0-rc1.windows-amd64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.15.0-rc1/buildx-v0.15.0-rc1.windows-amd64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.15.0-rc1/buildx-v0.15.0-rc1.windows-arm64.exe",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.15.0-rc1/buildx-v0.15.0-rc1.windows-arm64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.15.0-rc1/buildx-v0.15.0-rc1.windows-arm64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.15.0-rc1/checksums.txt"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"v0.14.1": {
|
||||||
|
"id": 156924662,
|
||||||
|
"tag_name": "v0.14.1",
|
||||||
|
"html_url": "https://github.com/docker/buildx/releases/tag/v0.14.1",
|
||||||
|
"assets": [
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.14.1/buildx-v0.14.1.darwin-amd64",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.14.1/buildx-v0.14.1.darwin-amd64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.14.1/buildx-v0.14.1.darwin-amd64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.14.1/buildx-v0.14.1.darwin-arm64",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.14.1/buildx-v0.14.1.darwin-arm64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.14.1/buildx-v0.14.1.darwin-arm64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.14.1/buildx-v0.14.1.linux-amd64",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.14.1/buildx-v0.14.1.linux-amd64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.14.1/buildx-v0.14.1.linux-amd64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.14.1/buildx-v0.14.1.linux-arm-v6",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.14.1/buildx-v0.14.1.linux-arm-v6.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.14.1/buildx-v0.14.1.linux-arm-v6.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.14.1/buildx-v0.14.1.linux-arm-v7",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.14.1/buildx-v0.14.1.linux-arm-v7.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.14.1/buildx-v0.14.1.linux-arm-v7.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.14.1/buildx-v0.14.1.linux-arm64",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.14.1/buildx-v0.14.1.linux-arm64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.14.1/buildx-v0.14.1.linux-arm64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.14.1/buildx-v0.14.1.linux-ppc64le",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.14.1/buildx-v0.14.1.linux-ppc64le.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.14.1/buildx-v0.14.1.linux-ppc64le.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.14.1/buildx-v0.14.1.linux-riscv64",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.14.1/buildx-v0.14.1.linux-riscv64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.14.1/buildx-v0.14.1.linux-riscv64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.14.1/buildx-v0.14.1.linux-s390x",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.14.1/buildx-v0.14.1.linux-s390x.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.14.1/buildx-v0.14.1.linux-s390x.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.14.1/buildx-v0.14.1.windows-amd64.exe",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.14.1/buildx-v0.14.1.windows-amd64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.14.1/buildx-v0.14.1.windows-amd64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.14.1/buildx-v0.14.1.windows-arm64.exe",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.14.1/buildx-v0.14.1.windows-arm64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.14.1/buildx-v0.14.1.windows-arm64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.14.1/checksums.txt"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"v0.14.0": {
|
"v0.14.0": {
|
||||||
|
|||||||
30
.github/docker-releases.json
vendored
30
.github/docker-releases.json
vendored
@@ -1,8 +1,32 @@
|
|||||||
{
|
{
|
||||||
"latest": {
|
"latest": {
|
||||||
"id": 154733361,
|
"id": 159031384,
|
||||||
"tag_name": "v26.1.2",
|
"tag_name": "v26.1.4",
|
||||||
"html_url": "https://github.com/moby/moby/releases/tag/v26.1.2",
|
"html_url": "https://github.com/moby/moby/releases/tag/v26.1.4",
|
||||||
|
"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": {
|
||||||
|
"id": 159031384,
|
||||||
|
"tag_name": "v26.1.4",
|
||||||
|
"html_url": "https://github.com/moby/moby/releases/tag/v26.1.4",
|
||||||
|
"assets": []
|
||||||
|
},
|
||||||
|
"v23.0.12": {
|
||||||
|
"id": 158038616,
|
||||||
|
"tag_name": "v23.0.12",
|
||||||
|
"html_url": "https://github.com/moby/moby/releases/tag/v23.0.12",
|
||||||
|
"assets": []
|
||||||
|
},
|
||||||
|
"v26.1.3": {
|
||||||
|
"id": 155867714,
|
||||||
|
"tag_name": "v26.1.3",
|
||||||
|
"html_url": "https://github.com/moby/moby/releases/tag/v26.1.3",
|
||||||
"assets": []
|
"assets": []
|
||||||
},
|
},
|
||||||
"v26.1.2": {
|
"v26.1.2": {
|
||||||
|
|||||||
2
.github/workflows/test.yml
vendored
2
.github/workflows/test.yml
vendored
@@ -15,7 +15,7 @@ on:
|
|||||||
|
|
||||||
env:
|
env:
|
||||||
NODE_VERSION: "20"
|
NODE_VERSION: "20"
|
||||||
BUILDX_VERSION: "v0.14.0"
|
BUILDX_VERSION: "v0.15.0"
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
test:
|
test:
|
||||||
|
|||||||
3
.github/workflows/virtual-env.yml
vendored
3
.github/workflows/virtual-env.yml
vendored
@@ -21,6 +21,7 @@ jobs:
|
|||||||
matrix:
|
matrix:
|
||||||
os:
|
os:
|
||||||
- ubuntu-latest
|
- ubuntu-latest
|
||||||
|
- ubuntu-24.04
|
||||||
- ubuntu-22.04
|
- ubuntu-22.04
|
||||||
- ubuntu-20.04
|
- ubuntu-20.04
|
||||||
steps:
|
steps:
|
||||||
@@ -42,7 +43,7 @@ jobs:
|
|||||||
-
|
-
|
||||||
name: Docker daemon conf
|
name: Docker daemon conf
|
||||||
run: |
|
run: |
|
||||||
cat /etc/docker/daemon.json
|
cat /etc/docker/daemon.json || true
|
||||||
-
|
-
|
||||||
name: Docker info
|
name: Docker info
|
||||||
run: docker info
|
run: docker info
|
||||||
|
|||||||
@@ -22,7 +22,8 @@ export const context = {
|
|||||||
repo: 'actions-toolkit'
|
repo: 'actions-toolkit'
|
||||||
},
|
},
|
||||||
ref: 'refs/heads/master',
|
ref: 'refs/heads/master',
|
||||||
runId: 123,
|
runId: 2188748038,
|
||||||
|
runNumber: 15,
|
||||||
payload: {
|
payload: {
|
||||||
after: '860c1904a1ce19322e91ac35af1ab07466440c37',
|
after: '860c1904a1ce19322e91ac35af1ab07466440c37',
|
||||||
base_ref: null,
|
base_ref: null,
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ import {beforeEach, describe, expect, it, jest, test} from '@jest/globals';
|
|||||||
import {BuildKit} from '../../src/buildkit/buildkit';
|
import {BuildKit} from '../../src/buildkit/buildkit';
|
||||||
import {Builder} from '../../src/buildx/builder';
|
import {Builder} from '../../src/buildx/builder';
|
||||||
|
|
||||||
import {BuilderInfo} from '../../src/types/builder';
|
import {BuilderInfo} from '../../src/types/buildx/builder';
|
||||||
|
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
jest.clearAllMocks();
|
jest.clearAllMocks();
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ import * as fs from 'fs';
|
|||||||
import * as path from 'path';
|
import * as path from 'path';
|
||||||
|
|
||||||
import {Bake} from '../../src/buildx/bake';
|
import {Bake} from '../../src/buildx/bake';
|
||||||
import {BakeDefinition} from '../../src/types/bake';
|
import {BakeDefinition} from '../../src/types/buildx/bake';
|
||||||
|
|
||||||
const fixturesDir = path.join(__dirname, '..', 'fixtures');
|
const fixturesDir = path.join(__dirname, '..', 'fixtures');
|
||||||
|
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ import {Bake} from '../../src/buildx/bake';
|
|||||||
import {Context} from '../../src/context';
|
import {Context} from '../../src/context';
|
||||||
|
|
||||||
import {ExecOptions} from '@actions/exec';
|
import {ExecOptions} from '@actions/exec';
|
||||||
import {BakeDefinition, BakeMetadata} from '../../src/types/bake';
|
import {BakeDefinition, BakeMetadata} from '../../src/types/buildx/bake';
|
||||||
|
|
||||||
const fixturesDir = path.join(__dirname, '..', 'fixtures');
|
const fixturesDir = path.join(__dirname, '..', 'fixtures');
|
||||||
// prettier-ignore
|
// prettier-ignore
|
||||||
|
|||||||
@@ -22,17 +22,11 @@ import * as rimraf from 'rimraf';
|
|||||||
import {Context} from '../../src/context';
|
import {Context} from '../../src/context';
|
||||||
import {Build} from '../../src/buildx/build';
|
import {Build} from '../../src/buildx/build';
|
||||||
|
|
||||||
import {BuildMetadata} from '../../src/types/build';
|
|
||||||
|
|
||||||
const fixturesDir = path.join(__dirname, '..', 'fixtures');
|
const fixturesDir = path.join(__dirname, '..', 'fixtures');
|
||||||
// prettier-ignore
|
// prettier-ignore
|
||||||
const tmpDir = path.join(process.env.TEMP || '/tmp', 'buildx-inputs-jest');
|
const tmpDir = path.join(process.env.TEMP || '/tmp', 'buildx-inputs-jest');
|
||||||
const tmpName = path.join(tmpDir, '.tmpname-jest');
|
const tmpName = path.join(tmpDir, '.tmpname-jest');
|
||||||
const metadata: BuildMetadata = {
|
const metadata = JSON.parse(fs.readFileSync(path.join(fixturesDir, 'metadata.json'), 'utf-8'));
|
||||||
'buildx.build.ref': 'default/default/n6ibcp9b2pw108rrz7ywdznvo',
|
|
||||||
'containerimage.config.digest': 'sha256:059b68a595b22564a1cbc167f369349fdc2ecc1f7bc092c2235cbf601a795fd',
|
|
||||||
'containerimage.digest': 'sha256:b09b9482c72371486bb2c1d2c2a2633ed1d0b8389e12c8d52b9e052725c0c83c'
|
|
||||||
};
|
|
||||||
|
|
||||||
jest.spyOn(Context, 'tmpDir').mockImplementation((): string => {
|
jest.spyOn(Context, 'tmpDir').mockImplementation((): string => {
|
||||||
if (!fs.existsSync(tmpDir)) {
|
if (!fs.existsSync(tmpDir)) {
|
||||||
@@ -78,6 +72,18 @@ 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('resolveDigest', () => {
|
describe('resolveDigest', () => {
|
||||||
it('matches', async () => {
|
it('matches', async () => {
|
||||||
const build = new Build();
|
const build = new Build();
|
||||||
@@ -100,7 +106,7 @@ describe('getProvenanceInput', () => {
|
|||||||
test.each([
|
test.each([
|
||||||
[
|
[
|
||||||
'true',
|
'true',
|
||||||
'builder-id=https://github.com/docker/actions-toolkit/actions/runs/123'
|
'builder-id=https://github.com/docker/actions-toolkit/actions/runs/2188748038/attempts/2'
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
'false',
|
'false',
|
||||||
@@ -108,11 +114,11 @@ describe('getProvenanceInput', () => {
|
|||||||
],
|
],
|
||||||
[
|
[
|
||||||
'mode=min',
|
'mode=min',
|
||||||
'mode=min,builder-id=https://github.com/docker/actions-toolkit/actions/runs/123'
|
'mode=min,builder-id=https://github.com/docker/actions-toolkit/actions/runs/2188748038/attempts/2'
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
'mode=max',
|
'mode=max',
|
||||||
'mode=max,builder-id=https://github.com/docker/actions-toolkit/actions/runs/123'
|
'mode=max,builder-id=https://github.com/docker/actions-toolkit/actions/runs/2188748038/attempts/2'
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
'builder-id=foo',
|
'builder-id=foo',
|
||||||
@@ -137,11 +143,11 @@ describe('resolveProvenanceAttrs', () => {
|
|||||||
test.each([
|
test.each([
|
||||||
[
|
[
|
||||||
'mode=min',
|
'mode=min',
|
||||||
'mode=min,builder-id=https://github.com/docker/actions-toolkit/actions/runs/123'
|
'mode=min,builder-id=https://github.com/docker/actions-toolkit/actions/runs/2188748038/attempts/2'
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
'mode=max',
|
'mode=max',
|
||||||
'mode=max,builder-id=https://github.com/docker/actions-toolkit/actions/runs/123'
|
'mode=max,builder-id=https://github.com/docker/actions-toolkit/actions/runs/2188748038/attempts/2'
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
'builder-id=foo',
|
'builder-id=foo',
|
||||||
@@ -153,7 +159,7 @@ describe('resolveProvenanceAttrs', () => {
|
|||||||
],
|
],
|
||||||
[
|
[
|
||||||
'',
|
'',
|
||||||
'builder-id=https://github.com/docker/actions-toolkit/actions/runs/123'
|
'builder-id=https://github.com/docker/actions-toolkit/actions/runs/2188748038/attempts/2'
|
||||||
],
|
],
|
||||||
])('given %p', async (input: string, expected: string) => {
|
])('given %p', async (input: string, expected: string) => {
|
||||||
expect(Build.resolveProvenanceAttrs(input)).toEqual(expected);
|
expect(Build.resolveProvenanceAttrs(input)).toEqual(expected);
|
||||||
@@ -202,6 +208,54 @@ describe('resolveSecret', () => {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
describe('resolveCacheToAttrs', () => {
|
||||||
|
// prettier-ignore
|
||||||
|
test.each([
|
||||||
|
[
|
||||||
|
'',
|
||||||
|
undefined,
|
||||||
|
''
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'user/app:cache',
|
||||||
|
undefined,
|
||||||
|
'user/app:cache'
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'type=inline',
|
||||||
|
undefined,
|
||||||
|
'type=inline'
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'type=gha',
|
||||||
|
undefined,
|
||||||
|
'type=gha,repository=docker/actions-toolkit',
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'type=gha,mode=max',
|
||||||
|
undefined,
|
||||||
|
'type=gha,mode=max,repository=docker/actions-toolkit',
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'type=gha,mode=max',
|
||||||
|
'abcd1234',
|
||||||
|
'type=gha,mode=max,repository=docker/actions-toolkit,ghtoken=abcd1234',
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'type=gha,repository=foo/bar,mode=max',
|
||||||
|
undefined,
|
||||||
|
'type=gha,repository=foo/bar,mode=max',
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'type=gha,repository=foo/bar,mode=max',
|
||||||
|
'abcd1234',
|
||||||
|
'type=gha,repository=foo/bar,mode=max,ghtoken=abcd1234',
|
||||||
|
],
|
||||||
|
])('given %p', async (input: string, githubToken: string | undefined, expected: string) => {
|
||||||
|
expect(Build.resolveCacheToAttrs(input, githubToken)).toEqual(expected);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
describe('hasLocalExporter', () => {
|
describe('hasLocalExporter', () => {
|
||||||
// prettier-ignore
|
// prettier-ignore
|
||||||
test.each([
|
test.each([
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ import * as path from 'path';
|
|||||||
import {Builder} from '../../src/buildx/builder';
|
import {Builder} from '../../src/buildx/builder';
|
||||||
import {Exec} from '../../src/exec';
|
import {Exec} from '../../src/exec';
|
||||||
|
|
||||||
import {BuilderInfo} from '../../src/types/builder';
|
import {BuilderInfo} from '../../src/types/buildx/builder';
|
||||||
|
|
||||||
const fixturesDir = path.join(__dirname, '..', 'fixtures');
|
const fixturesDir = path.join(__dirname, '..', 'fixtures');
|
||||||
|
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ import {Buildx} from '../../src/buildx/buildx';
|
|||||||
import {Context} from '../../src/context';
|
import {Context} from '../../src/context';
|
||||||
import {Exec} from '../../src/exec';
|
import {Exec} from '../../src/exec';
|
||||||
|
|
||||||
import {Cert} from '../../src/types/buildx';
|
import {Cert} from '../../src/types/buildx/buildx';
|
||||||
|
|
||||||
const fixturesDir = path.join(__dirname, '..', 'fixtures');
|
const fixturesDir = path.join(__dirname, '..', 'fixtures');
|
||||||
// prettier-ignore
|
// prettier-ignore
|
||||||
|
|||||||
@@ -86,6 +86,7 @@ maybe('exportBuild', () => {
|
|||||||
expect(exportRes?.dockerbuildFilename).toBeDefined();
|
expect(exportRes?.dockerbuildFilename).toBeDefined();
|
||||||
expect(exportRes?.dockerbuildSize).toBeDefined();
|
expect(exportRes?.dockerbuildSize).toBeDefined();
|
||||||
expect(fs.existsSync(exportRes?.dockerbuildFilename)).toBe(true);
|
expect(fs.existsSync(exportRes?.dockerbuildFilename)).toBe(true);
|
||||||
|
expect(exportRes?.summaries).toBeDefined();
|
||||||
});
|
});
|
||||||
|
|
||||||
// prettier-ignore
|
// prettier-ignore
|
||||||
@@ -147,5 +148,6 @@ maybe('exportBuild', () => {
|
|||||||
expect(exportRes?.dockerbuildFilename).toBeDefined();
|
expect(exportRes?.dockerbuildFilename).toBeDefined();
|
||||||
expect(exportRes?.dockerbuildSize).toBeDefined();
|
expect(exportRes?.dockerbuildSize).toBeDefined();
|
||||||
expect(fs.existsSync(exportRes?.dockerbuildFilename)).toBe(true);
|
expect(fs.existsSync(exportRes?.dockerbuildFilename)).toBe(true);
|
||||||
|
expect(exportRes?.summaries).toBeDefined();
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ import * as rimraf from 'rimraf';
|
|||||||
import {Docker} from '../../src/docker/docker';
|
import {Docker} from '../../src/docker/docker';
|
||||||
import {Exec} from '../../src/exec';
|
import {Exec} from '../../src/exec';
|
||||||
|
|
||||||
import {ConfigFile} from '../../src/types/docker';
|
import {ConfigFile} from '../../src/types/docker/docker';
|
||||||
|
|
||||||
const fixturesDir = path.join(__dirname, '..', 'fixtures');
|
const fixturesDir = path.join(__dirname, '..', 'fixtures');
|
||||||
|
|
||||||
|
|||||||
@@ -19,6 +19,7 @@ import {jest, describe, expect, test, beforeEach, afterEach} from '@jest/globals
|
|||||||
|
|
||||||
import {Install} from '../../src/docker/install';
|
import {Install} from '../../src/docker/install';
|
||||||
import {Docker} from '../../src/docker/docker';
|
import {Docker} from '../../src/docker/docker';
|
||||||
|
import {Exec} from '../../src/exec';
|
||||||
|
|
||||||
// prettier-ignore
|
// prettier-ignore
|
||||||
const tmpDir = path.join(process.env.TEMP || '/tmp', 'docker-install-jest');
|
const tmpDir = path.join(process.env.TEMP || '/tmp', 'docker-install-jest');
|
||||||
@@ -38,8 +39,19 @@ aarch64:https://cloud.debian.org/images/cloud/bookworm/20231013-1532/debian-12-g
|
|||||||
process.env = originalEnv;
|
process.env = originalEnv;
|
||||||
});
|
});
|
||||||
// prettier-ignore
|
// prettier-ignore
|
||||||
test.each(['v24.0.4'])(
|
test.each(['v26.1.4'])(
|
||||||
'install docker %s', async (version) => {
|
'install docker %s', async (version) => {
|
||||||
|
if (process.env.ImageOS && process.env.ImageOS.startsWith('ubuntu')) {
|
||||||
|
// Remove containerd first on ubuntu runners to make sure it takes
|
||||||
|
// ones packaged with docker
|
||||||
|
await Exec.exec('sudo', ['apt-get', 'remove', '-y', 'containerd.io'], {
|
||||||
|
env: Object.assign({}, process.env, {
|
||||||
|
DEBIAN_FRONTEND: 'noninteractive'
|
||||||
|
}) as {
|
||||||
|
[key: string]: string;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
await expect((async () => {
|
await expect((async () => {
|
||||||
const install = new Install({
|
const install = new Install({
|
||||||
version: version,
|
version: version,
|
||||||
|
|||||||
@@ -14,7 +14,10 @@
|
|||||||
# See the License for the specific language governing permissions and
|
# See the License for the specific language governing permissions and
|
||||||
# limitations under the License.
|
# limitations under the License.
|
||||||
|
|
||||||
FROM busybox
|
FROM busybox AS build
|
||||||
ARG NAME=foo
|
ARG NAME=foo
|
||||||
ARG TARGETPLATFORM
|
ARG TARGETPLATFORM
|
||||||
RUN echo "Hello $NAME from $TARGETPLATFORM"
|
RUN echo "Hello $NAME from $TARGETPLATFORM" > foo
|
||||||
|
|
||||||
|
FROM scratch
|
||||||
|
COPY --from=build /foo /
|
||||||
|
|||||||
45
__tests__/fixtures/metadata.json
Normal file
45
__tests__/fixtures/metadata.json
Normal file
@@ -0,0 +1,45 @@
|
|||||||
|
{
|
||||||
|
"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",
|
||||||
|
"containerimage.config.digest": "sha256:059b68a595b22564a1cbc167f369349fdc2ecc1f7bc092c2235cbf601a795fd",
|
||||||
|
"containerimage.digest": "sha256:b09b9482c72371486bb2c1d2c2a2633ed1d0b8389e12c8d52b9e052725c0c83c"
|
||||||
|
}
|
||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
__tests__/fixtures/oci-archive/hello-oci-gzip.tar
Normal file
BIN
__tests__/fixtures/oci-archive/hello-oci-gzip.tar
Normal file
Binary file not shown.
BIN
__tests__/fixtures/oci-archive/hello-oci-multiplatform-gzip.tar
Normal file
BIN
__tests__/fixtures/oci-archive/hello-oci-multiplatform-gzip.tar
Normal file
Binary file not shown.
BIN
__tests__/fixtures/oci-archive/hello-oci-uncompressed.tar
Normal file
BIN
__tests__/fixtures/oci-archive/hello-oci-uncompressed.tar
Normal file
Binary file not shown.
BIN
__tests__/fixtures/oci-archive/hello-oci-zstd.tar
Normal file
BIN
__tests__/fixtures/oci-archive/hello-oci-zstd.tar
Normal file
Binary file not shown.
BIN
__tests__/fixtures/oci-archive/moby~buildkit~LWDOW6.dockerbuild
Normal file
BIN
__tests__/fixtures/oci-archive/moby~buildkit~LWDOW6.dockerbuild
Normal file
Binary file not shown.
@@ -14,13 +14,22 @@
|
|||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import {beforeEach, describe, expect, it, jest} from '@jest/globals';
|
import {beforeEach, describe, expect, it, jest, test} from '@jest/globals';
|
||||||
|
import fs from 'fs';
|
||||||
import * as path from 'path';
|
import * as path from 'path';
|
||||||
|
|
||||||
|
import {Buildx} from '../src/buildx/buildx';
|
||||||
|
import {Bake} from '../src/buildx/bake';
|
||||||
|
import {Build} from '../src/buildx/build';
|
||||||
|
import {Exec} from '../src/exec';
|
||||||
import {GitHub} from '../src/github';
|
import {GitHub} from '../src/github';
|
||||||
|
import {History} from '../src/buildx/history';
|
||||||
|
|
||||||
const fixturesDir = path.join(__dirname, 'fixtures');
|
const fixturesDir = path.join(__dirname, 'fixtures');
|
||||||
|
|
||||||
|
// prettier-ignore
|
||||||
|
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;
|
const maybe = !process.env.GITHUB_ACTIONS || (process.env.GITHUB_ACTIONS === 'true' && process.env.ImageOS && process.env.ImageOS.startsWith('ubuntu')) ? describe : describe.skip;
|
||||||
|
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
@@ -39,3 +48,149 @@ maybe('uploadArtifact', () => {
|
|||||||
expect(res?.url).toBeDefined();
|
expect(res?.url).toBeDefined();
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
maybe('writeBuildSummary', () => {
|
||||||
|
// prettier-ignore
|
||||||
|
test.each([
|
||||||
|
[
|
||||||
|
"single",
|
||||||
|
[
|
||||||
|
'build',
|
||||||
|
'-f', path.join(fixturesDir, 'hello.Dockerfile'),
|
||||||
|
fixturesDir
|
||||||
|
],
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"multiplatform",
|
||||||
|
[
|
||||||
|
'build',
|
||||||
|
'-f', path.join(fixturesDir, 'hello.Dockerfile'),
|
||||||
|
'--platform', 'linux/amd64,linux/arm64',
|
||||||
|
fixturesDir
|
||||||
|
],
|
||||||
|
]
|
||||||
|
])('write build summary %p', async (_, bargs) => {
|
||||||
|
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',
|
||||||
|
...bargs,
|
||||||
|
'--metadata-file', build.getMetadataFilePath()
|
||||||
|
]);
|
||||||
|
await Exec.exec(buildCmd.command, buildCmd.args);
|
||||||
|
})()
|
||||||
|
).resolves.not.toThrow();
|
||||||
|
|
||||||
|
const metadata = build.resolveMetadata();
|
||||||
|
expect(metadata).toBeDefined();
|
||||||
|
const buildRef = build.resolveRef(metadata);
|
||||||
|
expect(buildRef).toBeDefined();
|
||||||
|
|
||||||
|
const history = new History({buildx: buildx});
|
||||||
|
const exportRes = await history.export({
|
||||||
|
refs: [buildRef ?? '']
|
||||||
|
});
|
||||||
|
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.Dockerfile')
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
// prettier-ignore
|
||||||
|
test.each([
|
||||||
|
[
|
||||||
|
'single',
|
||||||
|
[
|
||||||
|
'bake',
|
||||||
|
'-f', path.join(fixturesDir, 'hello-bake.hcl'),
|
||||||
|
'hello'
|
||||||
|
],
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'group',
|
||||||
|
[
|
||||||
|
'bake',
|
||||||
|
'-f', path.join(fixturesDir, 'hello-bake.hcl'),
|
||||||
|
'hello-all'
|
||||||
|
],
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'matrix',
|
||||||
|
[
|
||||||
|
'bake',
|
||||||
|
'-f', path.join(fixturesDir, 'hello-bake.hcl'),
|
||||||
|
'hello-matrix'
|
||||||
|
],
|
||||||
|
]
|
||||||
|
])('write bake summary %p', async (_, bargs) => {
|
||||||
|
const buildx = new Buildx();
|
||||||
|
const bake = new Bake({buildx: buildx});
|
||||||
|
|
||||||
|
fs.mkdirSync(tmpDir, {recursive: true});
|
||||||
|
await expect(
|
||||||
|
(async () => {
|
||||||
|
// prettier-ignore
|
||||||
|
const buildCmd = await buildx.getCommand([
|
||||||
|
'--builder', process.env.CTN_BUILDER_NAME ?? 'default',
|
||||||
|
...bargs,
|
||||||
|
'--metadata-file', bake.getMetadataFilePath()
|
||||||
|
]);
|
||||||
|
await Exec.exec(buildCmd.command, buildCmd.args, {
|
||||||
|
cwd: fixturesDir
|
||||||
|
});
|
||||||
|
})()
|
||||||
|
).resolves.not.toThrow();
|
||||||
|
|
||||||
|
const metadata = bake.resolveMetadata();
|
||||||
|
expect(metadata).toBeDefined();
|
||||||
|
const buildRefs = bake.resolveRefs(metadata);
|
||||||
|
expect(buildRefs).toBeDefined();
|
||||||
|
|
||||||
|
const history = new History({buildx: buildx});
|
||||||
|
const exportRes = await history.export({
|
||||||
|
refs: buildRefs ?? []
|
||||||
|
});
|
||||||
|
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: {
|
||||||
|
files: path.join(fixturesDir, 'hello-bake.hcl')
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|||||||
@@ -32,7 +32,7 @@ jest.spyOn(GitHub.prototype, 'repoData').mockImplementation((): Promise<GitHubRe
|
|||||||
});
|
});
|
||||||
|
|
||||||
describe('repoData', () => {
|
describe('repoData', () => {
|
||||||
it('returns GitHub repository', async () => {
|
it('returns GitHub repo data', async () => {
|
||||||
const github = new GitHub();
|
const github = new GitHub();
|
||||||
expect((await github.repoData()).name).toEqual('Hello-World');
|
expect((await github.repoData()).name).toEqual('Hello-World');
|
||||||
});
|
});
|
||||||
@@ -89,9 +89,18 @@ describe('apiURL', () => {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
describe('repository', () => {
|
||||||
|
it('returns GitHub repository', async () => {
|
||||||
|
expect(GitHub.repository).toEqual('docker/actions-toolkit');
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
describe('workflowRunURL', () => {
|
describe('workflowRunURL', () => {
|
||||||
it('returns 123', async () => {
|
it('returns 2188748038', async () => {
|
||||||
expect(GitHub.workflowRunURL).toEqual('https://github.com/docker/actions-toolkit/actions/runs/123');
|
expect(GitHub.workflowRunURL()).toEqual('https://github.com/docker/actions-toolkit/actions/runs/2188748038');
|
||||||
|
});
|
||||||
|
it('returns 2188748038 with attempts 2', async () => {
|
||||||
|
expect(GitHub.workflowRunURL(true)).toEqual('https://github.com/docker/actions-toolkit/actions/runs/2188748038/attempts/2');
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
50
__tests__/oci/oci.test.ts
Normal file
50
__tests__/oci/oci.test.ts
Normal file
@@ -0,0 +1,50 @@
|
|||||||
|
/**
|
||||||
|
* 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 {afterEach, beforeEach, describe, expect, jest, test} from '@jest/globals';
|
||||||
|
import * as fs from 'fs';
|
||||||
|
import path from 'path';
|
||||||
|
import * as rimraf from 'rimraf';
|
||||||
|
|
||||||
|
import {OCI} from '../../src/oci/oci';
|
||||||
|
|
||||||
|
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);
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('loadArchive', () => {
|
||||||
|
// prettier-ignore
|
||||||
|
test.each(fs.readdirSync(path.join(fixturesDir, 'oci-archive')).filter(file => {
|
||||||
|
return fs.statSync(path.join(path.join(fixturesDir, 'oci-archive'), file)).isFile();
|
||||||
|
}).map(filename => [filename]))('extracting %p', async (filename) => {
|
||||||
|
const res = await OCI.loadArchive({
|
||||||
|
file: path.join(fixturesDir, 'oci-archive', filename)
|
||||||
|
});
|
||||||
|
expect(res).toBeDefined();
|
||||||
|
expect(res?.root.index).toBeDefined();
|
||||||
|
expect(res?.root.layout).toBeDefined();
|
||||||
|
// console.log(JSON.stringify(res, null, 2));
|
||||||
|
});
|
||||||
|
});
|
||||||
@@ -31,6 +31,12 @@ describe('getInputList', () => {
|
|||||||
expect(res).toEqual(['bar']);
|
expect(res).toEqual(['bar']);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('empty correctly', async () => {
|
||||||
|
setInput('foo', '');
|
||||||
|
const res = Util.getInputList('foo');
|
||||||
|
expect(res).toEqual([]);
|
||||||
|
});
|
||||||
|
|
||||||
it('multiline correctly', async () => {
|
it('multiline correctly', async () => {
|
||||||
setInput('foo', 'bar\nbaz');
|
setInput('foo', 'bar\nbaz');
|
||||||
const res = Util.getInputList('foo');
|
const res = Util.getInputList('foo');
|
||||||
|
|||||||
@@ -16,7 +16,7 @@
|
|||||||
|
|
||||||
ARG NODE_VERSION=20
|
ARG NODE_VERSION=20
|
||||||
ARG DOCKER_VERSION=26.0.2
|
ARG DOCKER_VERSION=26.0.2
|
||||||
ARG BUILDX_VERSION=0.14.0
|
ARG BUILDX_VERSION=0.15.0
|
||||||
|
|
||||||
FROM node:${NODE_VERSION}-alpine AS base
|
FROM node:${NODE_VERSION}-alpine AS base
|
||||||
RUN apk add --no-cache cpio findutils git
|
RUN apk add --no-cache cpio findutils git
|
||||||
|
|||||||
@@ -23,6 +23,9 @@ const tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), 'docker-actions-toolkit-'))
|
|||||||
process.env = Object.assign({}, process.env, {
|
process.env = Object.assign({}, process.env, {
|
||||||
TEMP: tmpDir,
|
TEMP: tmpDir,
|
||||||
GITHUB_REPOSITORY: 'docker/actions-toolkit',
|
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_TEMP: path.join(tmpDir, 'runner-temp'),
|
||||||
RUNNER_TOOL_CACHE: path.join(tmpDir, 'runner-tool-cache')
|
RUNNER_TOOL_CACHE: path.join(tmpDir, 'runner-tool-cache')
|
||||||
}) as {
|
}) as {
|
||||||
|
|||||||
@@ -23,6 +23,9 @@ const tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), 'docker-actions-toolkit-'))
|
|||||||
process.env = Object.assign({}, process.env, {
|
process.env = Object.assign({}, process.env, {
|
||||||
TEMP: tmpDir,
|
TEMP: tmpDir,
|
||||||
GITHUB_REPOSITORY: 'docker/actions-toolkit',
|
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_TEMP: path.join(tmpDir, 'runner-temp'),
|
||||||
RUNNER_TOOL_CACHE: path.join(tmpDir, 'runner-tool-cache')
|
RUNNER_TOOL_CACHE: path.join(tmpDir, 'runner-tool-cache')
|
||||||
}) as {
|
}) as {
|
||||||
|
|||||||
@@ -58,15 +58,21 @@
|
|||||||
"@octokit/plugin-rest-endpoint-methods": "^10.4.0",
|
"@octokit/plugin-rest-endpoint-methods": "^10.4.0",
|
||||||
"async-retry": "^1.3.3",
|
"async-retry": "^1.3.3",
|
||||||
"csv-parse": "^5.5.6",
|
"csv-parse": "^5.5.6",
|
||||||
|
"gunzip-maybe": "^1.4.2",
|
||||||
"handlebars": "^4.7.8",
|
"handlebars": "^4.7.8",
|
||||||
|
"js-yaml": "^4.1.0",
|
||||||
"jwt-decode": "^4.0.0",
|
"jwt-decode": "^4.0.0",
|
||||||
"semver": "^7.6.2",
|
"semver": "^7.6.2",
|
||||||
|
"tar-stream": "^3.1.7",
|
||||||
"tmp": "^0.2.3"
|
"tmp": "^0.2.3"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@types/csv-parse": "^1.2.2",
|
"@types/csv-parse": "^1.2.2",
|
||||||
|
"@types/gunzip-maybe": "^1.4.2",
|
||||||
|
"@types/js-yaml": "^4.0.9",
|
||||||
"@types/node": "^20.12.10",
|
"@types/node": "^20.12.10",
|
||||||
"@types/semver": "^7.5.8",
|
"@types/semver": "^7.5.8",
|
||||||
|
"@types/tar-stream": "^3.1.3",
|
||||||
"@types/tmp": "^0.2.6",
|
"@types/tmp": "^0.2.6",
|
||||||
"@typescript-eslint/eslint-plugin": "^7.8.0",
|
"@typescript-eslint/eslint-plugin": "^7.8.0",
|
||||||
"@typescript-eslint/parser": "^7.8.0",
|
"@typescript-eslint/parser": "^7.8.0",
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ import {Builder} from '../buildx/builder';
|
|||||||
import {Config} from './config';
|
import {Config} from './config';
|
||||||
import {Exec} from '../exec';
|
import {Exec} from '../exec';
|
||||||
|
|
||||||
import {BuilderInfo, NodeInfo} from '../types/builder';
|
import {BuilderInfo, NodeInfo} from '../types/buildx/builder';
|
||||||
|
|
||||||
export interface BuildKitOpts {
|
export interface BuildKitOpts {
|
||||||
buildx?: Buildx;
|
buildx?: Buildx;
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ import {Exec} from '../exec';
|
|||||||
import {Util} from '../util';
|
import {Util} from '../util';
|
||||||
|
|
||||||
import {ExecOptions} from '@actions/exec';
|
import {ExecOptions} from '@actions/exec';
|
||||||
import {BakeDefinition, BakeMetadata} from '../types/bake';
|
import {BakeDefinition, BakeMetadata} from '../types/buildx/bake';
|
||||||
|
|
||||||
export interface BakeOpts {
|
export interface BakeOpts {
|
||||||
buildx?: Buildx;
|
buildx?: Buildx;
|
||||||
|
|||||||
@@ -24,7 +24,8 @@ import {Context} from '../context';
|
|||||||
import {GitHub} from '../github';
|
import {GitHub} from '../github';
|
||||||
import {Util} from '../util';
|
import {Util} from '../util';
|
||||||
|
|
||||||
import {BuildMetadata} from '../types/build';
|
import {BuildMetadata} from '../types/buildx/build';
|
||||||
|
import {ProvenancePredicate} from '../types/intoto/slsa_provenance/v0.2/provenance';
|
||||||
|
|
||||||
export interface BuildOpts {
|
export interface BuildOpts {
|
||||||
buildx?: Buildx;
|
buildx?: Buildx;
|
||||||
@@ -82,6 +83,19 @@ export class Build {
|
|||||||
return undefined;
|
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 resolveDigest(metadata?: BuildMetadata): string | undefined {
|
public resolveDigest(metadata?: BuildMetadata): string | undefined {
|
||||||
if (!metadata) {
|
if (!metadata) {
|
||||||
metadata = this.resolveMetadata();
|
metadata = this.resolveMetadata();
|
||||||
@@ -131,7 +145,7 @@ export class Build {
|
|||||||
return input;
|
return input;
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
return core.getBooleanInput(name) ? `builder-id=${GitHub.workflowRunURL}` : 'false';
|
return core.getBooleanInput(name) ? `builder-id=${GitHub.workflowRunURL(true)}` : 'false';
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
// not a valid boolean, so we assume it's a string
|
// not a valid boolean, so we assume it's a string
|
||||||
return Build.resolveProvenanceAttrs(input);
|
return Build.resolveProvenanceAttrs(input);
|
||||||
@@ -140,7 +154,7 @@ export class Build {
|
|||||||
|
|
||||||
public static resolveProvenanceAttrs(input: string): string {
|
public static resolveProvenanceAttrs(input: string): string {
|
||||||
if (!input) {
|
if (!input) {
|
||||||
return `builder-id=${GitHub.workflowRunURL}`;
|
return `builder-id=${GitHub.workflowRunURL(true)}`;
|
||||||
}
|
}
|
||||||
// parse attributes from input
|
// parse attributes from input
|
||||||
const fields = parse(input, {
|
const fields = parse(input, {
|
||||||
@@ -158,7 +172,46 @@ export class Build {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
// if not add builder-id attribute
|
// if not add builder-id attribute
|
||||||
return `${input},builder-id=${GitHub.workflowRunURL}`;
|
return `${input},builder-id=${GitHub.workflowRunURL(true)}`;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static resolveCacheToAttrs(input: string, githubToken?: string): string {
|
||||||
|
if (!input) {
|
||||||
|
return input;
|
||||||
|
}
|
||||||
|
|
||||||
|
let cacheType = 'registry';
|
||||||
|
let ghaCacheRepository = '';
|
||||||
|
let ghaCacheGHToken = '';
|
||||||
|
|
||||||
|
const fields = parse(input, {
|
||||||
|
relaxColumnCount: true,
|
||||||
|
skipEmptyLines: true
|
||||||
|
})[0];
|
||||||
|
for (const field of fields) {
|
||||||
|
const parts = field
|
||||||
|
.toString()
|
||||||
|
.split(/(?<=^[^=]+?)=/)
|
||||||
|
.map(item => item.trim());
|
||||||
|
if (parts[0] === 'type') {
|
||||||
|
cacheType = parts[1];
|
||||||
|
} else if (parts[0] === 'repository') {
|
||||||
|
ghaCacheRepository = parts[1];
|
||||||
|
} else if (parts[0] === 'ghtoken') {
|
||||||
|
ghaCacheGHToken = parts[1];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (cacheType === 'gha') {
|
||||||
|
if (!ghaCacheRepository) {
|
||||||
|
input = `${input},repository=${GitHub.repository}`;
|
||||||
|
}
|
||||||
|
if (!ghaCacheGHToken && githubToken) {
|
||||||
|
input = `${input},ghtoken=${githubToken}`;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return input;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static hasLocalExporter(exporters: string[]): boolean {
|
public static hasLocalExporter(exporters: string[]): boolean {
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ import * as core from '@actions/core';
|
|||||||
import {Buildx} from './buildx';
|
import {Buildx} from './buildx';
|
||||||
import {Exec} from '../exec';
|
import {Exec} from '../exec';
|
||||||
|
|
||||||
import {BuilderInfo, GCPolicy, NodeInfo} from '../types/builder';
|
import {BuilderInfo, GCPolicy, NodeInfo} from '../types/buildx/builder';
|
||||||
|
|
||||||
export interface BuilderOpts {
|
export interface BuilderOpts {
|
||||||
buildx?: Buildx;
|
buildx?: Buildx;
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ import * as semver from 'semver';
|
|||||||
import {Docker} from '../docker/docker';
|
import {Docker} from '../docker/docker';
|
||||||
import {Exec} from '../exec';
|
import {Exec} from '../exec';
|
||||||
|
|
||||||
import {Cert, LocalRefsOpts, LocalRefsResponse, LocalState} from '../types/buildx';
|
import {Cert, LocalRefsOpts, LocalRefsResponse, LocalState} from '../types/buildx/buildx';
|
||||||
|
|
||||||
export interface BuildxOpts {
|
export interface BuildxOpts {
|
||||||
standalone?: boolean;
|
standalone?: boolean;
|
||||||
|
|||||||
@@ -27,7 +27,7 @@ import {Docker} from '../docker/docker';
|
|||||||
import {Exec} from '../exec';
|
import {Exec} from '../exec';
|
||||||
import {GitHub} from '../github';
|
import {GitHub} from '../github';
|
||||||
|
|
||||||
import {ExportRecordOpts, ExportRecordResponse} from '../types/history';
|
import {ExportRecordOpts, ExportRecordResponse, Summaries} from '../types/buildx/history';
|
||||||
|
|
||||||
export interface HistoryOpts {
|
export interface HistoryOpts {
|
||||||
buildx?: Buildx;
|
buildx?: Buildx;
|
||||||
@@ -95,6 +95,7 @@ export class History {
|
|||||||
buildxDialStdioProc.stdout.pipe(fs.createWriteStream(buildxOutFifoPath));
|
buildxDialStdioProc.stdout.pipe(fs.createWriteStream(buildxOutFifoPath));
|
||||||
|
|
||||||
const tmpDockerbuildFilename = path.join(outDir, 'rec.dockerbuild');
|
const tmpDockerbuildFilename = path.join(outDir, 'rec.dockerbuild');
|
||||||
|
const summaryFilename = path.join(outDir, 'summary.json');
|
||||||
|
|
||||||
await new Promise<void>((resolve, reject) => {
|
await new Promise<void>((resolve, reject) => {
|
||||||
const ebargs: Array<string> = ['--ref-state-dir=/buildx-refs', `--node=${builderName}/${nodeName}`];
|
const ebargs: Array<string> = ['--ref-state-dir=/buildx-refs', `--node=${builderName}/${nodeName}`];
|
||||||
@@ -145,9 +146,14 @@ export class History {
|
|||||||
fs.renameSync(tmpDockerbuildFilename, dockerbuildPath);
|
fs.renameSync(tmpDockerbuildFilename, dockerbuildPath);
|
||||||
const dockerbuildStats = fs.statSync(dockerbuildPath);
|
const dockerbuildStats = fs.statSync(dockerbuildPath);
|
||||||
|
|
||||||
|
core.info(`Parsing ${summaryFilename}`);
|
||||||
|
fs.statSync(summaryFilename);
|
||||||
|
const summaries = <Summaries>JSON.parse(fs.readFileSync(summaryFilename, {encoding: 'utf-8'}));
|
||||||
|
|
||||||
return {
|
return {
|
||||||
dockerbuildFilename: dockerbuildPath,
|
dockerbuildFilename: dockerbuildPath,
|
||||||
dockerbuildSize: dockerbuildStats.size,
|
dockerbuildSize: dockerbuildStats.size,
|
||||||
|
summaries: summaries,
|
||||||
builderName: builderName,
|
builderName: builderName,
|
||||||
nodeName: nodeName,
|
nodeName: nodeName,
|
||||||
refs: refs
|
refs: refs
|
||||||
|
|||||||
@@ -31,7 +31,7 @@ import {Docker} from '../docker/docker';
|
|||||||
import {Git} from '../git';
|
import {Git} from '../git';
|
||||||
import {Util} from '../util';
|
import {Util} from '../util';
|
||||||
|
|
||||||
import {DownloadVersion} from '../types/buildx';
|
import {DownloadVersion} from '../types/buildx/buildx';
|
||||||
import {GitHubRelease} from '../types/github';
|
import {GitHubRelease} from '../types/github';
|
||||||
|
|
||||||
export interface InstallOpts {
|
export interface InstallOpts {
|
||||||
|
|||||||
@@ -79,6 +79,9 @@ if (Get-Service docker -ErrorAction SilentlyContinue) {
|
|||||||
Write-Host "Service removed"
|
Write-Host "Service removed"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$env:Path = "$ToolDir;" + [System.Environment]::GetEnvironmentVariable("Path","Machine") + ";" + [System.Environment]::GetEnvironmentVariable("Path","User")
|
||||||
|
Write-Host "Path: $env:Path"
|
||||||
|
|
||||||
$env:DOCKER_HOST = $DockerHost
|
$env:DOCKER_HOST = $DockerHost
|
||||||
Write-Host "DOCKER_HOST: $env:DOCKER_HOST"
|
Write-Host "DOCKER_HOST: $env:DOCKER_HOST"
|
||||||
|
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ import {Cache} from '../cache';
|
|||||||
import {Exec} from '../exec';
|
import {Exec} from '../exec';
|
||||||
import {Util} from '../util';
|
import {Util} from '../util';
|
||||||
|
|
||||||
import {ConfigFile} from '../types/docker';
|
import {ConfigFile} from '../types/docker/docker';
|
||||||
|
|
||||||
export class Docker {
|
export class Docker {
|
||||||
static get configDir(): string {
|
static get configDir(): string {
|
||||||
|
|||||||
@@ -253,6 +253,12 @@ export class Install {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const envs = Object.assign({}, process.env, {
|
||||||
|
PATH: `${this.toolDir}:${process.env.PATH}`
|
||||||
|
}) as {
|
||||||
|
[key: string]: string;
|
||||||
|
};
|
||||||
|
|
||||||
await core.group('Start Docker daemon', async () => {
|
await core.group('Start Docker daemon', async () => {
|
||||||
const bashPath: string = await io.which('bash', true);
|
const bashPath: string = await io.which('bash', true);
|
||||||
const cmd = `${this.toolDir}/dockerd --host="${dockerHost}" --config-file="${daemonConfigPath}" --exec-root="${this.runDir}/execroot" --data-root="${this.runDir}/data" --pidfile="${this.runDir}/docker.pid" --userland-proxy=false`;
|
const cmd = `${this.toolDir}/dockerd --host="${dockerHost}" --config-file="${daemonConfigPath}" --exec-root="${this.runDir}/execroot" --data-root="${this.runDir}/data" --pidfile="${this.runDir}/docker.pid" --userland-proxy=false`;
|
||||||
@@ -262,11 +268,12 @@ export class Install {
|
|||||||
// avoid killing it when the action finishes running. Even if detached,
|
// avoid killing it when the action finishes running. Even if detached,
|
||||||
// we also need to run dockerd in a subshell and unref the process so
|
// we also need to run dockerd in a subshell and unref the process so
|
||||||
// GitHub Action doesn't wait for it to finish.
|
// GitHub Action doesn't wait for it to finish.
|
||||||
`sudo -E ${bashPath} << EOF
|
`sudo env "PATH=$PATH" ${bashPath} << EOF
|
||||||
( ${cmd} 2>&1 | tee "${this.runDir}/dockerd.log" ) &
|
( ${cmd} 2>&1 | tee "${this.runDir}/dockerd.log" ) &
|
||||||
EOF`,
|
EOF`,
|
||||||
[],
|
[],
|
||||||
{
|
{
|
||||||
|
env: envs,
|
||||||
detached: true,
|
detached: true,
|
||||||
shell: true,
|
shell: true,
|
||||||
stdio: ['ignore', process.stdout, process.stderr]
|
stdio: ['ignore', process.stdout, process.stderr]
|
||||||
@@ -280,7 +287,7 @@ EOF`,
|
|||||||
try {
|
try {
|
||||||
await Exec.getExecOutput(`docker version`, undefined, {
|
await Exec.getExecOutput(`docker version`, undefined, {
|
||||||
silent: true,
|
silent: true,
|
||||||
env: Object.assign({}, process.env, {
|
env: Object.assign({}, envs, {
|
||||||
DOCKER_HOST: dockerHost
|
DOCKER_HOST: dockerHost
|
||||||
}) as {
|
}) as {
|
||||||
[key: string]: string;
|
[key: string]: string;
|
||||||
|
|||||||
@@ -16,6 +16,8 @@
|
|||||||
|
|
||||||
import crypto from 'crypto';
|
import crypto from 'crypto';
|
||||||
import fs from 'fs';
|
import fs from 'fs';
|
||||||
|
import jsyaml from 'js-yaml';
|
||||||
|
import os from 'os';
|
||||||
import path from 'path';
|
import path from 'path';
|
||||||
import {CreateArtifactRequest, FinalizeArtifactRequest, StringValue} from '@actions/artifact/lib/generated';
|
import {CreateArtifactRequest, FinalizeArtifactRequest, StringValue} from '@actions/artifact/lib/generated';
|
||||||
import {internalArtifactTwirpClient} from '@actions/artifact/lib/internal/shared/artifact-twirp-client';
|
import {internalArtifactTwirpClient} from '@actions/artifact/lib/internal/shared/artifact-twirp-client';
|
||||||
@@ -23,6 +25,7 @@ import {getBackendIdsFromToken} from '@actions/artifact/lib/internal/shared/util
|
|||||||
import {getExpiration} from '@actions/artifact/lib/internal/upload/retention';
|
import {getExpiration} from '@actions/artifact/lib/internal/upload/retention';
|
||||||
import {InvalidResponseError, NetworkError} from '@actions/artifact';
|
import {InvalidResponseError, NetworkError} from '@actions/artifact';
|
||||||
import * as core from '@actions/core';
|
import * as core from '@actions/core';
|
||||||
|
import {SummaryTableCell} from '@actions/core/lib/summary';
|
||||||
import * as github from '@actions/github';
|
import * as github from '@actions/github';
|
||||||
import {GitHub as Octokit} from '@actions/github/lib/utils';
|
import {GitHub as Octokit} from '@actions/github/lib/utils';
|
||||||
import {Context} from '@actions/github/lib/context';
|
import {Context} from '@actions/github/lib/context';
|
||||||
@@ -30,7 +33,9 @@ import {TransferProgressEvent} from '@azure/core-http';
|
|||||||
import {BlobClient, BlobHTTPHeaders} from '@azure/storage-blob';
|
import {BlobClient, BlobHTTPHeaders} from '@azure/storage-blob';
|
||||||
import {jwtDecode, JwtPayload} from 'jwt-decode';
|
import {jwtDecode, JwtPayload} from 'jwt-decode';
|
||||||
|
|
||||||
import {GitHubActionsRuntimeToken, GitHubActionsRuntimeTokenAC, GitHubRepo, UploadArtifactOpts, UploadArtifactResponse} from './types/github';
|
import {Util} from './util';
|
||||||
|
|
||||||
|
import {BuildSummaryOpts, GitHubActionsRuntimeToken, GitHubActionsRuntimeTokenAC, GitHubRepo, UploadArtifactOpts, UploadArtifactResponse} from './types/github';
|
||||||
|
|
||||||
export interface GitHubOpts {
|
export interface GitHubOpts {
|
||||||
token?: string;
|
token?: string;
|
||||||
@@ -59,8 +64,14 @@ export class GitHub {
|
|||||||
return process.env.GITHUB_API_URL || 'https://api.github.com';
|
return process.env.GITHUB_API_URL || 'https://api.github.com';
|
||||||
}
|
}
|
||||||
|
|
||||||
static get workflowRunURL(): string {
|
static get repository(): string {
|
||||||
return `${GitHub.serverURL}/${github.context.repo.owner}/${github.context.repo.repo}/actions/runs/${github.context.runId}`;
|
return `${github.context.repo.owner}/${github.context.repo.repo}`;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static workflowRunURL(setAttempts?: boolean): string {
|
||||||
|
// 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}` : ''}`;
|
||||||
}
|
}
|
||||||
|
|
||||||
static get actionsRuntimeToken(): GitHubActionsRuntimeToken | undefined {
|
static get actionsRuntimeToken(): GitHubActionsRuntimeToken | undefined {
|
||||||
@@ -180,7 +191,7 @@ export class GitHub {
|
|||||||
const artifactId = BigInt(finalizeArtifactResp.artifactId);
|
const artifactId = BigInt(finalizeArtifactResp.artifactId);
|
||||||
core.info(`Artifact successfully finalized (${artifactId})`);
|
core.info(`Artifact successfully finalized (${artifactId})`);
|
||||||
|
|
||||||
const artifactURL = `${GitHub.workflowRunURL}/artifacts/${artifactId}`;
|
const artifactURL = `${GitHub.workflowRunURL()}/artifacts/${artifactId}`;
|
||||||
core.info(`Artifact download URL: ${artifactURL}`);
|
core.info(`Artifact download URL: ${artifactURL}`);
|
||||||
|
|
||||||
return {
|
return {
|
||||||
@@ -190,4 +201,84 @@ export class GitHub {
|
|||||||
url: artifactURL
|
url: artifactURL
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static async writeBuildSummary(opts: BuildSummaryOpts): Promise<void> {
|
||||||
|
// can't use original core.summary.addLink due to the need to make
|
||||||
|
// EOL optional
|
||||||
|
const addLink = function (text: string, url: string, addEOL = false): string {
|
||||||
|
return `<a href="${url}">${text}</a>` + (addEOL ? os.EOL : '');
|
||||||
|
};
|
||||||
|
|
||||||
|
const refsSize = Object.keys(opts.exportRes.refs).length;
|
||||||
|
|
||||||
|
// prettier-ignore
|
||||||
|
const sum = core.summary
|
||||||
|
.addHeading('Docker Build summary', 1)
|
||||||
|
.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('</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(`</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);
|
||||||
|
|
||||||
|
const summaryTableData: Array<Array<SummaryTableCell>> = [
|
||||||
|
[
|
||||||
|
{header: true, data: 'ID'},
|
||||||
|
{header: true, data: 'Name'},
|
||||||
|
{header: true, data: 'Status'},
|
||||||
|
{header: true, data: 'Cached'},
|
||||||
|
{header: true, data: 'Duration'}
|
||||||
|
]
|
||||||
|
];
|
||||||
|
let summaryError: 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: `${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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
sum.addTable([...summaryTableData]);
|
||||||
|
if (summaryError) {
|
||||||
|
sum.addHeading('Error', 4);
|
||||||
|
sum.addCodeBlock(summaryError, 'text');
|
||||||
|
}
|
||||||
|
|
||||||
|
if (opts.inputs) {
|
||||||
|
sum.addHeading('Build inputs', 2).addCodeBlock(
|
||||||
|
jsyaml.dump(opts.inputs, {
|
||||||
|
indent: 2,
|
||||||
|
lineWidth: -1
|
||||||
|
}),
|
||||||
|
'yaml'
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (opts.bakeDefinition) {
|
||||||
|
sum.addHeading('Bake definition', 2).addCodeBlock(JSON.stringify(opts.bakeDefinition, null, 2), 'json');
|
||||||
|
}
|
||||||
|
|
||||||
|
core.info(`Writing summary`);
|
||||||
|
await sum.addSeparator().write();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
163
src/oci/oci.ts
Normal file
163
src/oci/oci.ts
Normal file
@@ -0,0 +1,163 @@
|
|||||||
|
/**
|
||||||
|
* 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 fs from 'fs';
|
||||||
|
import gunzip from 'gunzip-maybe';
|
||||||
|
import * as path from 'path';
|
||||||
|
import {Readable} from 'stream';
|
||||||
|
import * as tar from 'tar-stream';
|
||||||
|
|
||||||
|
import {Archive, LoadArchiveOpts} from '../types/oci/oci';
|
||||||
|
import {Index} from '../types/oci';
|
||||||
|
import {Manifest} from '../types/oci/manifest';
|
||||||
|
import {Image} from '../types/oci/config';
|
||||||
|
import {IMAGE_BLOBS_DIR_V1, IMAGE_INDEX_FILE_V1, IMAGE_LAYOUT_FILE_V1, ImageLayout} from '../types/oci/layout';
|
||||||
|
import {MEDIATYPE_IMAGE_INDEX_V1, MEDIATYPE_IMAGE_MANIFEST_V1} from '../types/oci/mediatype';
|
||||||
|
|
||||||
|
export class OCI {
|
||||||
|
public static loadArchive(opts: LoadArchiveOpts): Promise<Archive> {
|
||||||
|
return new Promise<Archive>((resolve, reject) => {
|
||||||
|
const tarex: tar.Extract = tar.extract();
|
||||||
|
|
||||||
|
let rootIndex: Index;
|
||||||
|
let rootLayout: ImageLayout;
|
||||||
|
const indexes: Record<string, Index> = {};
|
||||||
|
const manifests: Record<string, Manifest> = {};
|
||||||
|
const images: Record<string, Image> = {};
|
||||||
|
const blobs: Record<string, unknown> = {};
|
||||||
|
|
||||||
|
tarex.on('entry', async (header, stream, next) => {
|
||||||
|
if (header.type === 'file') {
|
||||||
|
const filename = path.normalize(header.name);
|
||||||
|
if (filename === IMAGE_INDEX_FILE_V1) {
|
||||||
|
rootIndex = await OCI.streamToJson<Index>(stream);
|
||||||
|
} else if (filename === IMAGE_LAYOUT_FILE_V1) {
|
||||||
|
rootLayout = await OCI.streamToJson<ImageLayout>(stream);
|
||||||
|
} else if (filename.startsWith(path.join(IMAGE_BLOBS_DIR_V1, path.sep))) {
|
||||||
|
const blob = await OCI.extractBlob(stream);
|
||||||
|
const digest = `${filename.split(path.sep)[1]}:${filename.split(path.sep)[filename.split(path.sep).length - 1]}`;
|
||||||
|
if (OCI.isIndex(blob)) {
|
||||||
|
indexes[digest] = <Index>JSON.parse(blob);
|
||||||
|
} else if (OCI.isManifest(blob)) {
|
||||||
|
manifests[digest] = <Manifest>JSON.parse(blob);
|
||||||
|
} else if (OCI.isImage(blob)) {
|
||||||
|
images[digest] = <Image>JSON.parse(blob);
|
||||||
|
} else {
|
||||||
|
blobs[digest] = blob;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
reject(new Error(`Invalid OCI archive: unexpected file ${filename}`));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
stream.resume();
|
||||||
|
next();
|
||||||
|
});
|
||||||
|
|
||||||
|
tarex.on('finish', () => {
|
||||||
|
if (!rootIndex || !rootLayout) {
|
||||||
|
reject(new Error('Invalid OCI archive: missing index or layout'));
|
||||||
|
}
|
||||||
|
resolve({
|
||||||
|
root: {
|
||||||
|
index: rootIndex,
|
||||||
|
layout: rootLayout
|
||||||
|
},
|
||||||
|
indexes: indexes,
|
||||||
|
manifests: manifests,
|
||||||
|
images: images,
|
||||||
|
blobs: blobs
|
||||||
|
} as Archive);
|
||||||
|
});
|
||||||
|
|
||||||
|
tarex.on('error', error => {
|
||||||
|
reject(error);
|
||||||
|
});
|
||||||
|
|
||||||
|
fs.createReadStream(opts.file).pipe(gunzip()).pipe(tarex);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||||
|
private static isIndex(blob: any): boolean {
|
||||||
|
try {
|
||||||
|
const index = <Index>JSON.parse(blob);
|
||||||
|
return index.mediaType === MEDIATYPE_IMAGE_INDEX_V1;
|
||||||
|
} catch {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||||
|
private static isManifest(blob: any): boolean {
|
||||||
|
try {
|
||||||
|
const manifest = <Manifest>JSON.parse(blob);
|
||||||
|
return manifest.mediaType === MEDIATYPE_IMAGE_MANIFEST_V1 && manifest.layers.length > 0;
|
||||||
|
} catch {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||||
|
private static isImage(blob: any): boolean {
|
||||||
|
try {
|
||||||
|
const image = <Image>JSON.parse(blob);
|
||||||
|
return image.rootfs.type !== '';
|
||||||
|
} catch {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||||
|
private static extractBlob(stream: Readable): Promise<any> {
|
||||||
|
return new Promise<unknown>((resolve, reject) => {
|
||||||
|
const chunks: Buffer[] = [];
|
||||||
|
const dstream = stream.pipe(gunzip());
|
||||||
|
dstream.on('data', chunk => {
|
||||||
|
chunks.push(chunk);
|
||||||
|
});
|
||||||
|
dstream.on('end', () => {
|
||||||
|
resolve(Buffer.concat(chunks).toString('utf8'));
|
||||||
|
});
|
||||||
|
dstream.on('error', async error => {
|
||||||
|
reject(error);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
private static async streamToJson<T>(stream: Readable): Promise<T> {
|
||||||
|
return new Promise<T>((resolve, reject) => {
|
||||||
|
const chunks: string[] = [];
|
||||||
|
let bytes = 0;
|
||||||
|
stream.on('data', chunk => {
|
||||||
|
bytes += chunk.length;
|
||||||
|
if (bytes <= 2 * 1024 * 1024) {
|
||||||
|
chunks.push(chunk.toString('utf8'));
|
||||||
|
} else {
|
||||||
|
reject(new Error('The data stream exceeds the size limit for JSON parsing.'));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
stream.on('end', () => {
|
||||||
|
try {
|
||||||
|
resolve(JSON.parse(chunks.join('')));
|
||||||
|
} catch (error) {
|
||||||
|
reject(error);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
stream.on('error', async error => {
|
||||||
|
reject(error);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
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 = {
|
export type BuildMetadata = {
|
||||||
[key: string]: string;
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||||
|
[key: string]: any;
|
||||||
};
|
};
|
||||||
@@ -22,7 +22,23 @@ export interface ExportRecordOpts {
|
|||||||
export interface ExportRecordResponse {
|
export interface ExportRecordResponse {
|
||||||
dockerbuildFilename: string;
|
dockerbuildFilename: string;
|
||||||
dockerbuildSize: number;
|
dockerbuildSize: number;
|
||||||
|
summaries: Summaries;
|
||||||
builderName: string;
|
builderName: string;
|
||||||
nodeName: string;
|
nodeName: string;
|
||||||
refs: Array<string>;
|
refs: Array<string>;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export interface Summaries {
|
||||||
|
[ref: string]: RecordSummary;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface RecordSummary {
|
||||||
|
name: string;
|
||||||
|
status: string;
|
||||||
|
duration: string;
|
||||||
|
numCachedSteps: number;
|
||||||
|
numTotalSteps: number;
|
||||||
|
numCompletedSteps: number;
|
||||||
|
frontendAttrs: Record<string, string>;
|
||||||
|
error?: string;
|
||||||
|
}
|
||||||
@@ -17,6 +17,9 @@
|
|||||||
import {components as OctoOpenApiTypes} from '@octokit/openapi-types';
|
import {components as OctoOpenApiTypes} from '@octokit/openapi-types';
|
||||||
import {JwtPayload} from 'jwt-decode';
|
import {JwtPayload} from 'jwt-decode';
|
||||||
|
|
||||||
|
import {BakeDefinition} from './buildx/bake';
|
||||||
|
import {ExportRecordResponse} from './buildx/history';
|
||||||
|
|
||||||
export interface GitHubRelease {
|
export interface GitHubRelease {
|
||||||
id: number;
|
id: number;
|
||||||
tag_name: string;
|
tag_name: string;
|
||||||
@@ -47,3 +50,11 @@ export interface UploadArtifactResponse {
|
|||||||
size: number;
|
size: number;
|
||||||
url: string;
|
url: string;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export interface BuildSummaryOpts {
|
||||||
|
exportRes: ExportRecordResponse;
|
||||||
|
uploadRes: UploadArtifactResponse;
|
||||||
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||||
|
inputs?: any;
|
||||||
|
bakeDefinition?: BakeDefinition;
|
||||||
|
}
|
||||||
|
|||||||
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;
|
||||||
|
}
|
||||||
52
src/types/oci/config.ts
Normal file
52
src/types/oci/config.ts
Normal file
@@ -0,0 +1,52 @@
|
|||||||
|
/**
|
||||||
|
* 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 './digest';
|
||||||
|
import {Platform} from './descriptor';
|
||||||
|
|
||||||
|
export interface ImageConfig {
|
||||||
|
User?: string;
|
||||||
|
ExposedPorts?: Record<string, unknown>;
|
||||||
|
Env?: string[];
|
||||||
|
Entrypoint?: string[];
|
||||||
|
Cmd?: string[];
|
||||||
|
Volumes?: Record<string, unknown>;
|
||||||
|
WorkingDir?: string;
|
||||||
|
Labels?: Record<string, string>;
|
||||||
|
StopSignal?: string;
|
||||||
|
ArgsEscaped?: boolean;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface RootFS {
|
||||||
|
type: string;
|
||||||
|
diff_ids: Digest[];
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface History {
|
||||||
|
created?: string; // assuming RFC 3339 formatted string
|
||||||
|
created_by?: string;
|
||||||
|
author?: string;
|
||||||
|
comment?: string;
|
||||||
|
empty_layer?: boolean;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface Image extends Platform {
|
||||||
|
created?: string; // assuming RFC 3339 formatted string
|
||||||
|
author?: string;
|
||||||
|
config?: ImageConfig;
|
||||||
|
rootfs: RootFS;
|
||||||
|
history?: History[];
|
||||||
|
}
|
||||||
45
src/types/oci/descriptor.ts
Normal file
45
src/types/oci/descriptor.ts
Normal file
@@ -0,0 +1,45 @@
|
|||||||
|
/**
|
||||||
|
* 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 './digest';
|
||||||
|
|
||||||
|
import {MEDIATYPE_EMPTY_JSON_V1} from './mediatype';
|
||||||
|
|
||||||
|
export interface Descriptor {
|
||||||
|
mediaType: string;
|
||||||
|
digest: Digest;
|
||||||
|
size: number;
|
||||||
|
urls?: string[];
|
||||||
|
annotations?: Record<string, string>;
|
||||||
|
data?: string;
|
||||||
|
platform?: Platform;
|
||||||
|
artifactType?: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface Platform {
|
||||||
|
architecture: string;
|
||||||
|
os: string;
|
||||||
|
'os.version'?: string;
|
||||||
|
'os.features'?: string[];
|
||||||
|
variant?: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
export const DescriptorEmptyJSON: Descriptor = {
|
||||||
|
mediaType: MEDIATYPE_EMPTY_JSON_V1,
|
||||||
|
digest: 'sha256:44136fa355b3678a1146ad16f7e8649e94fb4fc21fe77e8310c060f61caaff8a',
|
||||||
|
size: 2,
|
||||||
|
data: '{}'
|
||||||
|
};
|
||||||
17
src/types/oci/digest.ts
Normal file
17
src/types/oci/digest.ts
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
/**
|
||||||
|
* 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
export type Digest = string;
|
||||||
26
src/types/oci/index.ts
Normal file
26
src/types/oci/index.ts
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
/**
|
||||||
|
* 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 {Versioned} from './versioned';
|
||||||
|
import {Descriptor} from './descriptor';
|
||||||
|
|
||||||
|
export interface Index extends Versioned {
|
||||||
|
mediaType?: string;
|
||||||
|
artifactType?: string;
|
||||||
|
manifests: Descriptor[];
|
||||||
|
subject?: Descriptor;
|
||||||
|
annotations?: Record<string, string>;
|
||||||
|
}
|
||||||
27
src/types/oci/layout.ts
Normal file
27
src/types/oci/layout.ts
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
/**
|
||||||
|
* 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
export const IMAGE_LAYOUT_FILE_V1 = 'oci-layout';
|
||||||
|
|
||||||
|
export const IMAGE_LAYOUT_VERSION_V1 = '1.0.0';
|
||||||
|
|
||||||
|
export const IMAGE_INDEX_FILE_V1 = 'index.json';
|
||||||
|
|
||||||
|
export const IMAGE_BLOBS_DIR_V1 = 'blobs';
|
||||||
|
|
||||||
|
export interface ImageLayout {
|
||||||
|
version: string;
|
||||||
|
}
|
||||||
27
src/types/oci/manifest.ts
Normal file
27
src/types/oci/manifest.ts
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
/**
|
||||||
|
* 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 './descriptor';
|
||||||
|
import {Versioned} from './versioned';
|
||||||
|
|
||||||
|
export interface Manifest extends Versioned {
|
||||||
|
mediaType?: string;
|
||||||
|
artifactType?: string;
|
||||||
|
config: Descriptor;
|
||||||
|
layers: Descriptor[];
|
||||||
|
subject?: Descriptor;
|
||||||
|
annotations?: Record<string, string>;
|
||||||
|
}
|
||||||
25
src/types/oci/mediatype.ts
Normal file
25
src/types/oci/mediatype.ts
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
/**
|
||||||
|
* 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
export const MEDIATYPE_DESCRIPTOR_V1 = 'application/vnd.oci.descriptor.v1+json';
|
||||||
|
|
||||||
|
export const MEDIATYPE_IMAGE_MANIFEST_V1 = 'application/vnd.oci.image.manifest.v1+json';
|
||||||
|
|
||||||
|
export const MEDIATYPE_IMAGE_INDEX_V1 = 'application/vnd.oci.image.index.v1+json';
|
||||||
|
|
||||||
|
export const MEDIATYPE_IMAGE_LAYER_V1 = 'application/vnd.oci.image.layer.v1.tar';
|
||||||
|
|
||||||
|
export const MEDIATYPE_EMPTY_JSON_V1 = 'application/vnd.oci.empty.v1+json';
|
||||||
36
src/types/oci/oci.ts
Normal file
36
src/types/oci/oci.ts
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
/**
|
||||||
|
* 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 {Index} from './index';
|
||||||
|
import {ImageLayout} from './layout';
|
||||||
|
import {Manifest} from './manifest';
|
||||||
|
import {Image} from './config';
|
||||||
|
|
||||||
|
export interface LoadArchiveOpts {
|
||||||
|
file: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface Archive {
|
||||||
|
root: {
|
||||||
|
index: Index;
|
||||||
|
layout: ImageLayout;
|
||||||
|
};
|
||||||
|
indexes: Record<string, Index>;
|
||||||
|
manifests: Record<string, Manifest>;
|
||||||
|
images: Record<string, Image>;
|
||||||
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||||
|
blobs: Record<string, any>;
|
||||||
|
}
|
||||||
19
src/types/oci/versioned.ts
Normal file
19
src/types/oci/versioned.ts
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
/**
|
||||||
|
* 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
export interface Versioned {
|
||||||
|
schemaVersion: number;
|
||||||
|
}
|
||||||
178
yarn.lock
178
yarn.lock
@@ -1111,8 +1111,11 @@ __metadata:
|
|||||||
"@octokit/core": ^5.1.0
|
"@octokit/core": ^5.1.0
|
||||||
"@octokit/plugin-rest-endpoint-methods": ^10.4.0
|
"@octokit/plugin-rest-endpoint-methods": ^10.4.0
|
||||||
"@types/csv-parse": ^1.2.2
|
"@types/csv-parse": ^1.2.2
|
||||||
|
"@types/gunzip-maybe": ^1.4.2
|
||||||
|
"@types/js-yaml": ^4.0.9
|
||||||
"@types/node": ^20.12.10
|
"@types/node": ^20.12.10
|
||||||
"@types/semver": ^7.5.8
|
"@types/semver": ^7.5.8
|
||||||
|
"@types/tar-stream": ^3.1.3
|
||||||
"@types/tmp": ^0.2.6
|
"@types/tmp": ^0.2.6
|
||||||
"@typescript-eslint/eslint-plugin": ^7.8.0
|
"@typescript-eslint/eslint-plugin": ^7.8.0
|
||||||
"@typescript-eslint/parser": ^7.8.0
|
"@typescript-eslint/parser": ^7.8.0
|
||||||
@@ -1124,12 +1127,15 @@ __metadata:
|
|||||||
eslint-plugin-import: ^2.29.1
|
eslint-plugin-import: ^2.29.1
|
||||||
eslint-plugin-jest: ^28.5.0
|
eslint-plugin-jest: ^28.5.0
|
||||||
eslint-plugin-prettier: ^5.1.3
|
eslint-plugin-prettier: ^5.1.3
|
||||||
|
gunzip-maybe: ^1.4.2
|
||||||
handlebars: ^4.7.8
|
handlebars: ^4.7.8
|
||||||
jest: ^29.7.0
|
jest: ^29.7.0
|
||||||
|
js-yaml: ^4.1.0
|
||||||
jwt-decode: ^4.0.0
|
jwt-decode: ^4.0.0
|
||||||
prettier: ^3.2.5
|
prettier: ^3.2.5
|
||||||
rimraf: ^5.0.5
|
rimraf: ^5.0.5
|
||||||
semver: ^7.6.2
|
semver: ^7.6.2
|
||||||
|
tar-stream: ^3.1.7
|
||||||
tmp: ^0.2.3
|
tmp: ^0.2.3
|
||||||
ts-jest: ^29.1.2
|
ts-jest: ^29.1.2
|
||||||
ts-node: ^10.9.2
|
ts-node: ^10.9.2
|
||||||
@@ -2160,6 +2166,15 @@ __metadata:
|
|||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
|
"@types/gunzip-maybe@npm:^1.4.2":
|
||||||
|
version: 1.4.2
|
||||||
|
resolution: "@types/gunzip-maybe@npm:1.4.2"
|
||||||
|
dependencies:
|
||||||
|
"@types/node": "*"
|
||||||
|
checksum: 9be931d6b74ea4e28f2682e3aac6c242448128c6e06bee2e5758e8747ef51f231c46f11e27783092530f81c51f0a5ce6f87217e92e7e80b55e7132c7538e5f3e
|
||||||
|
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":
|
"@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
|
version: 2.0.3
|
||||||
resolution: "@types/istanbul-lib-coverage@npm:2.0.3"
|
resolution: "@types/istanbul-lib-coverage@npm:2.0.3"
|
||||||
@@ -2185,6 +2200,13 @@ __metadata:
|
|||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
|
"@types/js-yaml@npm:^4.0.9":
|
||||||
|
version: 4.0.9
|
||||||
|
resolution: "@types/js-yaml@npm:4.0.9"
|
||||||
|
checksum: e5e5e49b5789a29fdb1f7d204f82de11cb9e8f6cb24ab064c616da5d6e1b3ccfbf95aa5d1498a9fbd3b9e745564e69b4a20b6c530b5a8bbb2d4eb830cda9bc69
|
||||||
|
languageName: node
|
||||||
|
linkType: hard
|
||||||
|
|
||||||
"@types/json-schema@npm:^7.0.15":
|
"@types/json-schema@npm:^7.0.15":
|
||||||
version: 7.0.15
|
version: 7.0.15
|
||||||
resolution: "@types/json-schema@npm:7.0.15"
|
resolution: "@types/json-schema@npm:7.0.15"
|
||||||
@@ -2239,6 +2261,15 @@ __metadata:
|
|||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
|
"@types/tar-stream@npm:^3.1.3":
|
||||||
|
version: 3.1.3
|
||||||
|
resolution: "@types/tar-stream@npm:3.1.3"
|
||||||
|
dependencies:
|
||||||
|
"@types/node": "*"
|
||||||
|
checksum: 187387748288b35924284afc26cf36b6b966377f5131398bf484c475f7191c50f5e5903c94a7391049b6cdfce174ae2e63f776dea9425d94ddc6bd31ebe386ee
|
||||||
|
languageName: node
|
||||||
|
linkType: hard
|
||||||
|
|
||||||
"@types/tmp@npm:^0.2.6":
|
"@types/tmp@npm:^0.2.6":
|
||||||
version: 0.2.6
|
version: 0.2.6
|
||||||
resolution: "@types/tmp@npm:0.2.6"
|
resolution: "@types/tmp@npm:0.2.6"
|
||||||
@@ -2925,11 +2956,20 @@ __metadata:
|
|||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"braces@npm:^3.0.1":
|
"braces@npm:^3.0.1":
|
||||||
version: 3.0.2
|
version: 3.0.3
|
||||||
resolution: "braces@npm:3.0.2"
|
resolution: "braces@npm:3.0.3"
|
||||||
dependencies:
|
dependencies:
|
||||||
fill-range: ^7.0.1
|
fill-range: ^7.1.1
|
||||||
checksum: e2a8e769a863f3d4ee887b5fe21f63193a891c68b612ddb4b68d82d1b5f3ff9073af066c343e9867a393fe4c2555dcb33e89b937195feb9c1613d259edfcd459
|
checksum: b95aa0b3bd909f6cd1720ffcf031aeaf46154dd88b4da01f9a1d3f7ea866a79eba76a6d01cbc3c422b2ee5cdc39a4f02491058d5df0d7bf6e6a162a832df1f69
|
||||||
|
languageName: node
|
||||||
|
linkType: hard
|
||||||
|
|
||||||
|
"browserify-zlib@npm:^0.1.4":
|
||||||
|
version: 0.1.4
|
||||||
|
resolution: "browserify-zlib@npm:0.1.4"
|
||||||
|
dependencies:
|
||||||
|
pako: ~0.2.0
|
||||||
|
checksum: abee4cb4349e8a21391fd874564f41b113fe691372913980e6fa06a777e4ea2aad4e942af14ab99bce190d5ac8f5328201432f4ef0eae48c6d02208bc212976f
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
@@ -3618,6 +3658,18 @@ __metadata:
|
|||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
|
"duplexify@npm:^3.5.0, duplexify@npm:^3.6.0":
|
||||||
|
version: 3.7.1
|
||||||
|
resolution: "duplexify@npm:3.7.1"
|
||||||
|
dependencies:
|
||||||
|
end-of-stream: ^1.0.0
|
||||||
|
inherits: ^2.0.1
|
||||||
|
readable-stream: ^2.0.0
|
||||||
|
stream-shift: ^1.0.0
|
||||||
|
checksum: 3c2ed2223d956a5da713dae12ba8295acb61d9acd966ccbba938090d04f4574ca4dca75cca089b5077c2d7e66101f32e6ea9b36a78ca213eff574e7a8b8accf2
|
||||||
|
languageName: node
|
||||||
|
linkType: hard
|
||||||
|
|
||||||
"eastasianwidth@npm:^0.2.0":
|
"eastasianwidth@npm:^0.2.0":
|
||||||
version: 0.2.0
|
version: 0.2.0
|
||||||
resolution: "eastasianwidth@npm:0.2.0"
|
resolution: "eastasianwidth@npm:0.2.0"
|
||||||
@@ -3669,6 +3721,15 @@ __metadata:
|
|||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
|
"end-of-stream@npm:^1.0.0, end-of-stream@npm:^1.1.0":
|
||||||
|
version: 1.4.4
|
||||||
|
resolution: "end-of-stream@npm:1.4.4"
|
||||||
|
dependencies:
|
||||||
|
once: ^1.4.0
|
||||||
|
checksum: 530a5a5a1e517e962854a31693dbb5c0b2fc40b46dad2a56a2deec656ca040631124f4795823acc68238147805f8b021abbe221f4afed5ef3c8e8efc2024908b
|
||||||
|
languageName: node
|
||||||
|
linkType: hard
|
||||||
|
|
||||||
"env-paths@npm:^2.2.0":
|
"env-paths@npm:^2.2.0":
|
||||||
version: 2.2.1
|
version: 2.2.1
|
||||||
resolution: "env-paths@npm:2.2.1"
|
resolution: "env-paths@npm:2.2.1"
|
||||||
@@ -4295,12 +4356,12 @@ __metadata:
|
|||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"fill-range@npm:^7.0.1":
|
"fill-range@npm:^7.1.1":
|
||||||
version: 7.0.1
|
version: 7.1.1
|
||||||
resolution: "fill-range@npm:7.0.1"
|
resolution: "fill-range@npm:7.1.1"
|
||||||
dependencies:
|
dependencies:
|
||||||
to-regex-range: ^5.0.1
|
to-regex-range: ^5.0.1
|
||||||
checksum: cc283f4e65b504259e64fd969bcf4def4eb08d85565e906b7d36516e87819db52029a76b6363d0f02d0d532f0033c9603b9e2d943d56ee3b0d4f7ad3328ff917
|
checksum: b4abfbca3839a3d55e4ae5ec62e131e2e356bf4859ce8480c64c4876100f4df292a63e5bb1618e1d7460282ca2b305653064f01654474aa35c68000980f17798
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
@@ -4725,6 +4786,22 @@ __metadata:
|
|||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
|
"gunzip-maybe@npm:^1.4.2":
|
||||||
|
version: 1.4.2
|
||||||
|
resolution: "gunzip-maybe@npm:1.4.2"
|
||||||
|
dependencies:
|
||||||
|
browserify-zlib: ^0.1.4
|
||||||
|
is-deflate: ^1.0.0
|
||||||
|
is-gzip: ^1.0.0
|
||||||
|
peek-stream: ^1.1.0
|
||||||
|
pumpify: ^1.3.3
|
||||||
|
through2: ^2.0.3
|
||||||
|
bin:
|
||||||
|
gunzip-maybe: bin.js
|
||||||
|
checksum: bc4d4977c24a2860238df271de75d53dd72a359d19f1248d1c613807dc221d3b8ae09624e3085c8106663e3e1b59db62a85b261d1138c2cc24efad9df577d4e1
|
||||||
|
languageName: node
|
||||||
|
linkType: hard
|
||||||
|
|
||||||
"handlebars@npm:^4.7.8":
|
"handlebars@npm:^4.7.8":
|
||||||
version: 4.7.8
|
version: 4.7.8
|
||||||
resolution: "handlebars@npm:4.7.8"
|
resolution: "handlebars@npm:4.7.8"
|
||||||
@@ -4980,7 +5057,7 @@ __metadata:
|
|||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"inherits@npm:2, inherits@npm:^2.0.3, inherits@npm:~2.0.3":
|
"inherits@npm:2, inherits@npm:^2.0.1, inherits@npm:^2.0.3, inherits@npm:~2.0.3":
|
||||||
version: 2.0.4
|
version: 2.0.4
|
||||||
resolution: "inherits@npm:2.0.4"
|
resolution: "inherits@npm:2.0.4"
|
||||||
checksum: 4a48a733847879d6cf6691860a6b1e3f0f4754176e4d71494c41f3475553768b10f84b5ce1d40fbd0e34e6bfbb864ee35858ad4dd2cf31e02fc4a154b724d7f1
|
checksum: 4a48a733847879d6cf6691860a6b1e3f0f4754176e4d71494c41f3475553768b10f84b5ce1d40fbd0e34e6bfbb864ee35858ad4dd2cf31e02fc4a154b724d7f1
|
||||||
@@ -5144,6 +5221,13 @@ __metadata:
|
|||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
|
"is-deflate@npm:^1.0.0":
|
||||||
|
version: 1.0.0
|
||||||
|
resolution: "is-deflate@npm:1.0.0"
|
||||||
|
checksum: c2f9f2d3db79ac50c5586697d1e69a55282a2b0cc5e437b3c470dd47f24e40b6216dcd7e024511e21381607bf57afa019343e3bd0e08a119032818b596004262
|
||||||
|
languageName: node
|
||||||
|
linkType: hard
|
||||||
|
|
||||||
"is-extglob@npm:^2.1.1":
|
"is-extglob@npm:^2.1.1":
|
||||||
version: 2.1.1
|
version: 2.1.1
|
||||||
resolution: "is-extglob@npm:2.1.1"
|
resolution: "is-extglob@npm:2.1.1"
|
||||||
@@ -5174,6 +5258,13 @@ __metadata:
|
|||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
|
"is-gzip@npm:^1.0.0":
|
||||||
|
version: 1.0.0
|
||||||
|
resolution: "is-gzip@npm:1.0.0"
|
||||||
|
checksum: 0d28931c1f445fa29c900cf9f48e06e9d1d477a3bf7bd7332e7ce68f1333ccd8cb381de2f0f62a9a262d9c0912608a9a71b4a40e788e201b3dbd67072bb20d86
|
||||||
|
languageName: node
|
||||||
|
linkType: hard
|
||||||
|
|
||||||
"is-lambda@npm:^1.0.1":
|
"is-lambda@npm:^1.0.1":
|
||||||
version: 1.0.1
|
version: 1.0.1
|
||||||
resolution: "is-lambda@npm:1.0.1"
|
resolution: "is-lambda@npm:1.0.1"
|
||||||
@@ -6582,7 +6673,7 @@ __metadata:
|
|||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"once@npm:^1.3.0, once@npm:^1.4.0":
|
"once@npm:^1.3.0, once@npm:^1.3.1, once@npm:^1.4.0":
|
||||||
version: 1.4.0
|
version: 1.4.0
|
||||||
resolution: "once@npm:1.4.0"
|
resolution: "once@npm:1.4.0"
|
||||||
dependencies:
|
dependencies:
|
||||||
@@ -6666,6 +6757,13 @@ __metadata:
|
|||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
|
"pako@npm:~0.2.0":
|
||||||
|
version: 0.2.9
|
||||||
|
resolution: "pako@npm:0.2.9"
|
||||||
|
checksum: 055f9487cd57fbb78df84315873bbdd089ba286f3499daed47d2effdc6253e981f5db6898c23486de76d4a781559f890d643bd3a49f70f1b4a18019c98aa5125
|
||||||
|
languageName: node
|
||||||
|
linkType: hard
|
||||||
|
|
||||||
"parent-module@npm:^1.0.0":
|
"parent-module@npm:^1.0.0":
|
||||||
version: 1.0.1
|
version: 1.0.1
|
||||||
resolution: "parent-module@npm:1.0.1"
|
resolution: "parent-module@npm:1.0.1"
|
||||||
@@ -6749,6 +6847,17 @@ __metadata:
|
|||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
|
"peek-stream@npm:^1.1.0":
|
||||||
|
version: 1.1.3
|
||||||
|
resolution: "peek-stream@npm:1.1.3"
|
||||||
|
dependencies:
|
||||||
|
buffer-from: ^1.0.0
|
||||||
|
duplexify: ^3.5.0
|
||||||
|
through2: ^2.0.3
|
||||||
|
checksum: a0e09d6d1a8a01158a3334f20d6b1cdd91747eba24eb06a1d742eefb620385593121a76d4378cc81f77cdce6a66df0575a41041b1189c510254aec91878afc99
|
||||||
|
languageName: node
|
||||||
|
linkType: hard
|
||||||
|
|
||||||
"picocolors@npm:^1.0.0":
|
"picocolors@npm:^1.0.0":
|
||||||
version: 1.0.0
|
version: 1.0.0
|
||||||
resolution: "picocolors@npm:1.0.0"
|
resolution: "picocolors@npm:1.0.0"
|
||||||
@@ -6879,6 +6988,27 @@ __metadata:
|
|||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
|
"pump@npm:^2.0.0":
|
||||||
|
version: 2.0.1
|
||||||
|
resolution: "pump@npm:2.0.1"
|
||||||
|
dependencies:
|
||||||
|
end-of-stream: ^1.1.0
|
||||||
|
once: ^1.3.1
|
||||||
|
checksum: e9f26a17be00810bff37ad0171edb35f58b242487b0444f92fb7d78bc7d61442fa9b9c5bd93a43fd8fd8ddd3cc75f1221f5e04c790f42907e5baab7cf5e2b931
|
||||||
|
languageName: node
|
||||||
|
linkType: hard
|
||||||
|
|
||||||
|
"pumpify@npm:^1.3.3":
|
||||||
|
version: 1.5.1
|
||||||
|
resolution: "pumpify@npm:1.5.1"
|
||||||
|
dependencies:
|
||||||
|
duplexify: ^3.6.0
|
||||||
|
inherits: ^2.0.3
|
||||||
|
pump: ^2.0.0
|
||||||
|
checksum: 26ca412ec8d665bd0d5e185c1b8f627728eff603440d75d22a58e421e3c66eaf86ec6fc6a6efc54808ecef65979279fa8e99b109a23ec1fa8d79f37e6978c9bd
|
||||||
|
languageName: node
|
||||||
|
linkType: hard
|
||||||
|
|
||||||
"punycode@npm:^2.1.0":
|
"punycode@npm:^2.1.0":
|
||||||
version: 2.1.1
|
version: 2.1.1
|
||||||
resolution: "punycode@npm:2.1.1"
|
resolution: "punycode@npm:2.1.1"
|
||||||
@@ -6921,7 +7051,7 @@ __metadata:
|
|||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"readable-stream@npm:^2.0.5":
|
"readable-stream@npm:^2.0.0, readable-stream@npm:^2.0.5, readable-stream@npm:~2.3.6":
|
||||||
version: 2.3.8
|
version: 2.3.8
|
||||||
resolution: "readable-stream@npm:2.3.8"
|
resolution: "readable-stream@npm:2.3.8"
|
||||||
dependencies:
|
dependencies:
|
||||||
@@ -7432,6 +7562,13 @@ __metadata:
|
|||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
|
"stream-shift@npm:^1.0.0":
|
||||||
|
version: 1.0.3
|
||||||
|
resolution: "stream-shift@npm:1.0.3"
|
||||||
|
checksum: a24c0a3f66a8f9024bd1d579a533a53be283b4475d4e6b4b3211b964031447bdf6532dd1f3c2b0ad66752554391b7c62bd7ca4559193381f766534e723d50242
|
||||||
|
languageName: node
|
||||||
|
linkType: hard
|
||||||
|
|
||||||
"streamx@npm:^2.15.0":
|
"streamx@npm:^2.15.0":
|
||||||
version: 2.16.1
|
version: 2.16.1
|
||||||
resolution: "streamx@npm:2.16.1"
|
resolution: "streamx@npm:2.16.1"
|
||||||
@@ -7673,7 +7810,7 @@ __metadata:
|
|||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"tar-stream@npm:^3.0.0":
|
"tar-stream@npm:^3.0.0, tar-stream@npm:^3.1.7":
|
||||||
version: 3.1.7
|
version: 3.1.7
|
||||||
resolution: "tar-stream@npm:3.1.7"
|
resolution: "tar-stream@npm:3.1.7"
|
||||||
dependencies:
|
dependencies:
|
||||||
@@ -7716,6 +7853,16 @@ __metadata:
|
|||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
|
"through2@npm:^2.0.3":
|
||||||
|
version: 2.0.5
|
||||||
|
resolution: "through2@npm:2.0.5"
|
||||||
|
dependencies:
|
||||||
|
readable-stream: ~2.3.6
|
||||||
|
xtend: ~4.0.1
|
||||||
|
checksum: beb0f338aa2931e5660ec7bf3ad949e6d2e068c31f4737b9525e5201b824ac40cac6a337224856b56bd1ddd866334bbfb92a9f57cd6f66bc3f18d3d86fc0fe50
|
||||||
|
languageName: node
|
||||||
|
linkType: hard
|
||||||
|
|
||||||
"tmp@npm:^0.2.3":
|
"tmp@npm:^0.2.3":
|
||||||
version: 0.2.3
|
version: 0.2.3
|
||||||
resolution: "tmp@npm:0.2.3"
|
resolution: "tmp@npm:0.2.3"
|
||||||
@@ -8394,6 +8541,13 @@ __metadata:
|
|||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
|
"xtend@npm:~4.0.1":
|
||||||
|
version: 4.0.2
|
||||||
|
resolution: "xtend@npm:4.0.2"
|
||||||
|
checksum: ac5dfa738b21f6e7f0dd6e65e1b3155036d68104e67e5d5d1bde74892e327d7e5636a076f625599dc394330a731861e87343ff184b0047fef1360a7ec0a5a36a
|
||||||
|
languageName: node
|
||||||
|
linkType: hard
|
||||||
|
|
||||||
"y18n@npm:^5.0.5":
|
"y18n@npm:^5.0.5":
|
||||||
version: 5.0.8
|
version: 5.0.8
|
||||||
resolution: "y18n@npm:5.0.8"
|
resolution: "y18n@npm:5.0.8"
|
||||||
|
|||||||
Reference in New Issue
Block a user