Compare commits
159 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
663d108e8d | ||
|
|
2629338e09 | ||
|
|
7a01b3e2a4 | ||
|
|
c363216f0d | ||
|
|
0ebe5d1c2f | ||
|
|
6d03d1708d | ||
|
|
d6753812df | ||
|
|
3f7939e71c | ||
|
|
584493d659 | ||
|
|
dd4311c75e | ||
|
|
b91698741e | ||
|
|
36e5638636 | ||
|
|
d852953482 | ||
|
|
9bb2a9fe23 | ||
|
|
f4fdb6a9f8 | ||
|
|
558d76d017 | ||
|
|
f3dd07df13 | ||
|
|
0455460f6f | ||
|
|
f5c9bb7acd | ||
|
|
9d75f8f839 | ||
|
|
b86f723512 | ||
|
|
d3d7271f87 | ||
|
|
fddef161c1 | ||
|
|
e75930a3a6 | ||
|
|
bd5e1d1bab | ||
|
|
354737b4fc | ||
|
|
eea8c07dcc | ||
|
|
f08154f2c4 | ||
|
|
aae835e4b4 | ||
|
|
6f9aedec5e | ||
|
|
78cfd0384b | ||
|
|
d5f67f772e | ||
|
|
cb4777c2a5 | ||
|
|
80845a187b | ||
|
|
66e22ce5a5 | ||
|
|
7b63a1220d | ||
|
|
59715cf565 | ||
|
|
e8cb844045 | ||
|
|
a00c49179b | ||
|
|
dc2c313f17 | ||
|
|
c73f530a0e | ||
|
|
66fff011ac | ||
|
|
c4085cc810 | ||
|
|
79d8877773 | ||
|
|
95ac6338f1 | ||
|
|
7b72d5977b | ||
|
|
2ad0e2331e | ||
|
|
f2d14e7769 | ||
|
|
33dc7b6ecb | ||
|
|
6bf3dcef73 | ||
|
|
31d5e42cc0 | ||
|
|
32e2a6bf6f | ||
|
|
c8d666e020 | ||
|
|
49ed594253 | ||
|
|
144df6eecc | ||
|
|
c3e31dcc03 | ||
|
|
0f8ae202d6 | ||
|
|
c674e727ec | ||
|
|
a72977ca69 | ||
|
|
a6558f6584 | ||
|
|
6a8f167e10 | ||
|
|
19f5e39cc1 | ||
|
|
945af30d0c | ||
|
|
24a56dbe42 | ||
|
|
4e8d894523 | ||
|
|
5b15c952e9 | ||
|
|
9822f1ac09 | ||
|
|
b9121242ac | ||
|
|
c759388ee4 | ||
|
|
dfcd13e51e | ||
|
|
2be3d9389c | ||
|
|
541f8784ed | ||
|
|
4abccc4c6a | ||
|
|
fcc92b092b | ||
|
|
6e043aee71 | ||
|
|
7a37a260aa | ||
|
|
1534dfad1b | ||
|
|
08e669e7d5 | ||
|
|
83d366eb65 | ||
|
|
5b760c8b3a | ||
|
|
674ee4994a | ||
|
|
a56ca8f880 | ||
|
|
b833243795 | ||
|
|
823d1cfce9 | ||
|
|
97bc88d30b | ||
|
|
ed4441e704 | ||
|
|
7a4b2122b2 | ||
|
|
959fb2fd2e | ||
|
|
2c0d9d0c4e | ||
|
|
3199bce461 | ||
|
|
f1593e3aa2 | ||
|
|
db5c712dec | ||
|
|
fd97af130e | ||
|
|
ec700a3813 | ||
|
|
324e807d2e | ||
|
|
8e45354f0c | ||
|
|
906aacf7ff | ||
|
|
1d9f94872d | ||
|
|
b99f9ec3ef | ||
|
|
8d02bad9a9 | ||
|
|
c1edd0b5e3 | ||
|
|
70c0e12f74 | ||
|
|
ddcd63c92a | ||
|
|
0e5fc3661a | ||
|
|
3d49d98580 | ||
|
|
ca519e1aa8 | ||
|
|
b13ef76b5e | ||
|
|
2043356c92 | ||
|
|
84371bb189 | ||
|
|
ad6e71b881 | ||
|
|
e47142d45b | ||
|
|
e79f79bcd9 | ||
|
|
ab02f62089 | ||
|
|
8cef70fefb | ||
|
|
321a028303 | ||
|
|
80eaf0972b | ||
|
|
101a44b0a7 | ||
|
|
22cc0b6c27 | ||
|
|
21fdfc52c4 | ||
|
|
eebb677d5a | ||
|
|
495c96b050 | ||
|
|
b1e0aeed50 | ||
|
|
d0ee813215 | ||
|
|
b2a51dd6b4 | ||
|
|
acd3c9df19 | ||
|
|
8ad595b445 | ||
|
|
9450a454a7 | ||
|
|
a7221012c8 | ||
|
|
6fc5565c73 | ||
|
|
7492c7193a | ||
|
|
f05a598a08 | ||
|
|
fc85cef9e1 | ||
|
|
a5b683b46e | ||
|
|
0b166c63ef | ||
|
|
e072607266 | ||
|
|
a1ffbe9606 | ||
|
|
fdd740da2d | ||
|
|
8a9577d5e2 | ||
|
|
ca7a29d2d7 | ||
|
|
d39585b339 | ||
|
|
2e3ba6678f | ||
|
|
337a7240a5 | ||
|
|
728fcdbea9 | ||
|
|
dfa1a320c4 | ||
|
|
4ff86b974f | ||
|
|
181782ba21 | ||
|
|
dd977d3597 | ||
|
|
776422c908 | ||
|
|
d86a125551 | ||
|
|
633f41191f | ||
|
|
79def6b218 | ||
|
|
31e5d12fd9 | ||
|
|
1eda4b6a6c | ||
|
|
c71f3fe1ba | ||
|
|
8c8294806e | ||
|
|
ec382328c4 | ||
|
|
051c91700a | ||
|
|
471068fc6f | ||
|
|
60feaf2f84 |
@@ -1,12 +1,13 @@
|
|||||||
{
|
{
|
||||||
"env": {
|
"env": {
|
||||||
"node": true,
|
"node": true,
|
||||||
"es2021": true,
|
"es6": true,
|
||||||
"mocha": true,
|
"mocha": true,
|
||||||
"jest": true
|
"jest": true
|
||||||
},
|
},
|
||||||
"extends": [
|
"extends": [
|
||||||
"eslint:recommended",
|
"eslint:recommended",
|
||||||
|
"plugin:@typescript-eslint/eslint-recommended",
|
||||||
"plugin:@typescript-eslint/recommended",
|
"plugin:@typescript-eslint/recommended",
|
||||||
"plugin:import/errors",
|
"plugin:import/errors",
|
||||||
"plugin:import/typescript", // this is needed to allow importing typescript files from JS
|
"plugin:import/typescript", // this is needed to allow importing typescript files from JS
|
||||||
@@ -16,7 +17,7 @@
|
|||||||
],
|
],
|
||||||
"parser": "@typescript-eslint/parser",
|
"parser": "@typescript-eslint/parser",
|
||||||
"parserOptions": {
|
"parserOptions": {
|
||||||
"ecmaVersion": "latest",
|
"ecmaVersion": "2023",
|
||||||
"sourceType": "module"
|
"sourceType": "module"
|
||||||
},
|
},
|
||||||
"plugins": [
|
"plugins": [
|
||||||
@@ -27,7 +28,7 @@
|
|||||||
"rules": {
|
"rules": {
|
||||||
"import/no-unresolved": [
|
"import/no-unresolved": [
|
||||||
"error", {
|
"error", {
|
||||||
"ignore": ["csv-parse/sync"]
|
"ignore": ["csv-parse/sync", "@octokit/openapi-types"]
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"jest/no-disabled-tests": 0
|
"jest/no-disabled-tests": 0
|
||||||
|
|||||||
166
.github/buildx-lab-releases.json
vendored
Normal file
166
.github/buildx-lab-releases.json
vendored
Normal file
@@ -0,0 +1,166 @@
|
|||||||
|
{
|
||||||
|
"latest": {
|
||||||
|
"id": 123496811,
|
||||||
|
"tag_name": "v0.11.2-desktop.5",
|
||||||
|
"html_url": "https://github.com/docker/buildx-desktop/releases/tag/v0.11.2-desktop.5",
|
||||||
|
"assets": [
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.11.2-desktop.5/buildx-v0.11.2-desktop.5.darwin-amd64",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.11.2-desktop.5/buildx-v0.11.2-desktop.5.darwin-amd64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.11.2-desktop.5/buildx-v0.11.2-desktop.5.darwin-amd64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.11.2-desktop.5/buildx-v0.11.2-desktop.5.darwin-arm64",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.11.2-desktop.5/buildx-v0.11.2-desktop.5.darwin-arm64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.11.2-desktop.5/buildx-v0.11.2-desktop.5.darwin-arm64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.11.2-desktop.5/buildx-v0.11.2-desktop.5.linux-amd64",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.11.2-desktop.5/buildx-v0.11.2-desktop.5.linux-amd64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.11.2-desktop.5/buildx-v0.11.2-desktop.5.linux-amd64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.11.2-desktop.5/buildx-v0.11.2-desktop.5.linux-arm-v6",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.11.2-desktop.5/buildx-v0.11.2-desktop.5.linux-arm-v6.provenance.json",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.11.2-desktop.5/buildx-v0.11.2-desktop.5.linux-arm-v6.sbom.json",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.11.2-desktop.5/buildx-v0.11.2-desktop.5.linux-arm-v7",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.11.2-desktop.5/buildx-v0.11.2-desktop.5.linux-arm-v7.provenance.json",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.11.2-desktop.5/buildx-v0.11.2-desktop.5.linux-arm-v7.sbom.json",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.11.2-desktop.5/buildx-v0.11.2-desktop.5.linux-arm64",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.11.2-desktop.5/buildx-v0.11.2-desktop.5.linux-arm64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.11.2-desktop.5/buildx-v0.11.2-desktop.5.linux-arm64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.11.2-desktop.5/buildx-v0.11.2-desktop.5.linux-ppc64le",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.11.2-desktop.5/buildx-v0.11.2-desktop.5.linux-ppc64le.provenance.json",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.11.2-desktop.5/buildx-v0.11.2-desktop.5.linux-ppc64le.sbom.json",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.11.2-desktop.5/buildx-v0.11.2-desktop.5.linux-riscv64",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.11.2-desktop.5/buildx-v0.11.2-desktop.5.linux-riscv64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.11.2-desktop.5/buildx-v0.11.2-desktop.5.linux-riscv64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.11.2-desktop.5/buildx-v0.11.2-desktop.5.linux-s390x",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.11.2-desktop.5/buildx-v0.11.2-desktop.5.linux-s390x.provenance.json",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.11.2-desktop.5/buildx-v0.11.2-desktop.5.linux-s390x.sbom.json",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.11.2-desktop.5/buildx-v0.11.2-desktop.5.windows-amd64.exe",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.11.2-desktop.5/buildx-v0.11.2-desktop.5.windows-amd64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.11.2-desktop.5/buildx-v0.11.2-desktop.5.windows-amd64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.11.2-desktop.5/buildx-v0.11.2-desktop.5.windows-arm64.exe",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.11.2-desktop.5/buildx-v0.11.2-desktop.5.windows-arm64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.11.2-desktop.5/buildx-v0.11.2-desktop.5.windows-arm64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.11.2-desktop.5/checksums.txt"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"v0.11.2-desktop.5": {
|
||||||
|
"id": 123496811,
|
||||||
|
"tag_name": "v0.11.2-desktop.5",
|
||||||
|
"html_url": "https://github.com/docker/buildx-desktop/releases/tag/v0.11.2-desktop.5",
|
||||||
|
"assets": [
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.11.2-desktop.5/buildx-v0.11.2-desktop.5.darwin-amd64",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.11.2-desktop.5/buildx-v0.11.2-desktop.5.darwin-amd64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.11.2-desktop.5/buildx-v0.11.2-desktop.5.darwin-amd64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.11.2-desktop.5/buildx-v0.11.2-desktop.5.darwin-arm64",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.11.2-desktop.5/buildx-v0.11.2-desktop.5.darwin-arm64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.11.2-desktop.5/buildx-v0.11.2-desktop.5.darwin-arm64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.11.2-desktop.5/buildx-v0.11.2-desktop.5.linux-amd64",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.11.2-desktop.5/buildx-v0.11.2-desktop.5.linux-amd64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.11.2-desktop.5/buildx-v0.11.2-desktop.5.linux-amd64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.11.2-desktop.5/buildx-v0.11.2-desktop.5.linux-arm-v6",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.11.2-desktop.5/buildx-v0.11.2-desktop.5.linux-arm-v6.provenance.json",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.11.2-desktop.5/buildx-v0.11.2-desktop.5.linux-arm-v6.sbom.json",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.11.2-desktop.5/buildx-v0.11.2-desktop.5.linux-arm-v7",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.11.2-desktop.5/buildx-v0.11.2-desktop.5.linux-arm-v7.provenance.json",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.11.2-desktop.5/buildx-v0.11.2-desktop.5.linux-arm-v7.sbom.json",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.11.2-desktop.5/buildx-v0.11.2-desktop.5.linux-arm64",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.11.2-desktop.5/buildx-v0.11.2-desktop.5.linux-arm64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.11.2-desktop.5/buildx-v0.11.2-desktop.5.linux-arm64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.11.2-desktop.5/buildx-v0.11.2-desktop.5.linux-ppc64le",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.11.2-desktop.5/buildx-v0.11.2-desktop.5.linux-ppc64le.provenance.json",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.11.2-desktop.5/buildx-v0.11.2-desktop.5.linux-ppc64le.sbom.json",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.11.2-desktop.5/buildx-v0.11.2-desktop.5.linux-riscv64",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.11.2-desktop.5/buildx-v0.11.2-desktop.5.linux-riscv64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.11.2-desktop.5/buildx-v0.11.2-desktop.5.linux-riscv64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.11.2-desktop.5/buildx-v0.11.2-desktop.5.linux-s390x",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.11.2-desktop.5/buildx-v0.11.2-desktop.5.linux-s390x.provenance.json",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.11.2-desktop.5/buildx-v0.11.2-desktop.5.linux-s390x.sbom.json",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.11.2-desktop.5/buildx-v0.11.2-desktop.5.windows-amd64.exe",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.11.2-desktop.5/buildx-v0.11.2-desktop.5.windows-amd64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.11.2-desktop.5/buildx-v0.11.2-desktop.5.windows-amd64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.11.2-desktop.5/buildx-v0.11.2-desktop.5.windows-arm64.exe",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.11.2-desktop.5/buildx-v0.11.2-desktop.5.windows-arm64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.11.2-desktop.5/buildx-v0.11.2-desktop.5.windows-arm64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.11.2-desktop.5/checksums.txt"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"v0.11.2-desktop.4": {
|
||||||
|
"id": 119399782,
|
||||||
|
"tag_name": "v0.11.2-desktop.4",
|
||||||
|
"html_url": "https://github.com/docker/buildx-desktop/releases/tag/v0.11.2-desktop.4",
|
||||||
|
"assets": [
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.11.2-desktop.4/buildx-v0.11.2-desktop.4.darwin-amd64",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.11.2-desktop.4/buildx-v0.11.2-desktop.4.darwin-amd64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.11.2-desktop.4/buildx-v0.11.2-desktop.4.darwin-amd64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.11.2-desktop.4/buildx-v0.11.2-desktop.4.darwin-arm64",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.11.2-desktop.4/buildx-v0.11.2-desktop.4.darwin-arm64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.11.2-desktop.4/buildx-v0.11.2-desktop.4.darwin-arm64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.11.2-desktop.4/buildx-v0.11.2-desktop.4.linux-amd64",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.11.2-desktop.4/buildx-v0.11.2-desktop.4.linux-amd64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.11.2-desktop.4/buildx-v0.11.2-desktop.4.linux-amd64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.11.2-desktop.4/buildx-v0.11.2-desktop.4.linux-arm-v6",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.11.2-desktop.4/buildx-v0.11.2-desktop.4.linux-arm-v6.provenance.json",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.11.2-desktop.4/buildx-v0.11.2-desktop.4.linux-arm-v6.sbom.json",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.11.2-desktop.4/buildx-v0.11.2-desktop.4.linux-arm-v7",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.11.2-desktop.4/buildx-v0.11.2-desktop.4.linux-arm-v7.provenance.json",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.11.2-desktop.4/buildx-v0.11.2-desktop.4.linux-arm-v7.sbom.json",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.11.2-desktop.4/buildx-v0.11.2-desktop.4.linux-arm64",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.11.2-desktop.4/buildx-v0.11.2-desktop.4.linux-arm64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.11.2-desktop.4/buildx-v0.11.2-desktop.4.linux-arm64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.11.2-desktop.4/buildx-v0.11.2-desktop.4.linux-ppc64le",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.11.2-desktop.4/buildx-v0.11.2-desktop.4.linux-ppc64le.provenance.json",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.11.2-desktop.4/buildx-v0.11.2-desktop.4.linux-ppc64le.sbom.json",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.11.2-desktop.4/buildx-v0.11.2-desktop.4.linux-riscv64",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.11.2-desktop.4/buildx-v0.11.2-desktop.4.linux-riscv64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.11.2-desktop.4/buildx-v0.11.2-desktop.4.linux-riscv64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.11.2-desktop.4/buildx-v0.11.2-desktop.4.linux-s390x",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.11.2-desktop.4/buildx-v0.11.2-desktop.4.linux-s390x.provenance.json",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.11.2-desktop.4/buildx-v0.11.2-desktop.4.linux-s390x.sbom.json",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.11.2-desktop.4/buildx-v0.11.2-desktop.4.windows-amd64.exe",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.11.2-desktop.4/buildx-v0.11.2-desktop.4.windows-amd64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.11.2-desktop.4/buildx-v0.11.2-desktop.4.windows-amd64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.11.2-desktop.4/buildx-v0.11.2-desktop.4.windows-arm64.exe",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.11.2-desktop.4/buildx-v0.11.2-desktop.4.windows-arm64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.11.2-desktop.4/buildx-v0.11.2-desktop.4.windows-arm64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.11.2-desktop.4/checksums.txt"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"v0.11.2-desktop.2": {
|
||||||
|
"id": 118213369,
|
||||||
|
"tag_name": "v0.11.2-desktop.2",
|
||||||
|
"html_url": "https://github.com/docker/buildx-desktop/releases/tag/v0.11.2-desktop.2",
|
||||||
|
"assets": [
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.11.2-desktop.2/buildx-v0.11.2-desktop.2.darwin-amd64",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.11.2-desktop.2/buildx-v0.11.2-desktop.2.darwin-amd64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.11.2-desktop.2/buildx-v0.11.2-desktop.2.darwin-amd64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.11.2-desktop.2/buildx-v0.11.2-desktop.2.darwin-arm64",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.11.2-desktop.2/buildx-v0.11.2-desktop.2.darwin-arm64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.11.2-desktop.2/buildx-v0.11.2-desktop.2.darwin-arm64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.11.2-desktop.2/buildx-v0.11.2-desktop.2.linux-amd64",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.11.2-desktop.2/buildx-v0.11.2-desktop.2.linux-amd64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.11.2-desktop.2/buildx-v0.11.2-desktop.2.linux-amd64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.11.2-desktop.2/buildx-v0.11.2-desktop.2.linux-arm-v6",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.11.2-desktop.2/buildx-v0.11.2-desktop.2.linux-arm-v6.provenance.json",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.11.2-desktop.2/buildx-v0.11.2-desktop.2.linux-arm-v6.sbom.json",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.11.2-desktop.2/buildx-v0.11.2-desktop.2.linux-arm-v7",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.11.2-desktop.2/buildx-v0.11.2-desktop.2.linux-arm-v7.provenance.json",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.11.2-desktop.2/buildx-v0.11.2-desktop.2.linux-arm-v7.sbom.json",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.11.2-desktop.2/buildx-v0.11.2-desktop.2.linux-arm64",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.11.2-desktop.2/buildx-v0.11.2-desktop.2.linux-arm64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.11.2-desktop.2/buildx-v0.11.2-desktop.2.linux-arm64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.11.2-desktop.2/buildx-v0.11.2-desktop.2.linux-ppc64le",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.11.2-desktop.2/buildx-v0.11.2-desktop.2.linux-ppc64le.provenance.json",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.11.2-desktop.2/buildx-v0.11.2-desktop.2.linux-ppc64le.sbom.json",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.11.2-desktop.2/buildx-v0.11.2-desktop.2.linux-riscv64",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.11.2-desktop.2/buildx-v0.11.2-desktop.2.linux-riscv64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.11.2-desktop.2/buildx-v0.11.2-desktop.2.linux-riscv64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.11.2-desktop.2/buildx-v0.11.2-desktop.2.linux-s390x",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.11.2-desktop.2/buildx-v0.11.2-desktop.2.linux-s390x.provenance.json",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.11.2-desktop.2/buildx-v0.11.2-desktop.2.linux-s390x.sbom.json",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.11.2-desktop.2/buildx-v0.11.2-desktop.2.windows-amd64.exe",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.11.2-desktop.2/buildx-v0.11.2-desktop.2.windows-amd64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.11.2-desktop.2/buildx-v0.11.2-desktop.2.windows-amd64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.11.2-desktop.2/buildx-v0.11.2-desktop.2.windows-arm64.exe",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.11.2-desktop.2/buildx-v0.11.2-desktop.2.windows-arm64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.11.2-desktop.2/buildx-v0.11.2-desktop.2.windows-arm64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.11.2-desktop.2/checksums.txt"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
320
.github/buildx-releases.json
vendored
320
.github/buildx-releases.json
vendored
@@ -1,43 +1,289 @@
|
|||||||
{
|
{
|
||||||
"latest": {
|
"latest": {
|
||||||
"id": 94659464,
|
"id": 112690624,
|
||||||
"tag_name": "v0.10.4",
|
"tag_name": "v0.11.2",
|
||||||
"html_url": "https://github.com/docker/buildx/releases/tag/v0.10.4",
|
"html_url": "https://github.com/docker/buildx/releases/tag/v0.11.2",
|
||||||
"assets": [
|
"assets": [
|
||||||
"https://github.com/docker/buildx/releases/download/v0.10.4/buildx-v0.10.4.darwin-amd64",
|
"https://github.com/docker/buildx/releases/download/v0.11.2/buildx-v0.11.2.darwin-amd64",
|
||||||
"https://github.com/docker/buildx/releases/download/v0.10.4/buildx-v0.10.4.darwin-amd64.provenance.json",
|
"https://github.com/docker/buildx/releases/download/v0.11.2/buildx-v0.11.2.darwin-amd64.provenance.json",
|
||||||
"https://github.com/docker/buildx/releases/download/v0.10.4/buildx-v0.10.4.darwin-amd64.sbom.json",
|
"https://github.com/docker/buildx/releases/download/v0.11.2/buildx-v0.11.2.darwin-amd64.sbom.json",
|
||||||
"https://github.com/docker/buildx/releases/download/v0.10.4/buildx-v0.10.4.darwin-arm64",
|
"https://github.com/docker/buildx/releases/download/v0.11.2/buildx-v0.11.2.darwin-arm64",
|
||||||
"https://github.com/docker/buildx/releases/download/v0.10.4/buildx-v0.10.4.darwin-arm64.provenance.json",
|
"https://github.com/docker/buildx/releases/download/v0.11.2/buildx-v0.11.2.darwin-arm64.provenance.json",
|
||||||
"https://github.com/docker/buildx/releases/download/v0.10.4/buildx-v0.10.4.darwin-arm64.sbom.json",
|
"https://github.com/docker/buildx/releases/download/v0.11.2/buildx-v0.11.2.darwin-arm64.sbom.json",
|
||||||
"https://github.com/docker/buildx/releases/download/v0.10.4/buildx-v0.10.4.linux-amd64",
|
"https://github.com/docker/buildx/releases/download/v0.11.2/buildx-v0.11.2.linux-amd64",
|
||||||
"https://github.com/docker/buildx/releases/download/v0.10.4/buildx-v0.10.4.linux-amd64.provenance.json",
|
"https://github.com/docker/buildx/releases/download/v0.11.2/buildx-v0.11.2.linux-amd64.provenance.json",
|
||||||
"https://github.com/docker/buildx/releases/download/v0.10.4/buildx-v0.10.4.linux-amd64.sbom.json",
|
"https://github.com/docker/buildx/releases/download/v0.11.2/buildx-v0.11.2.linux-amd64.sbom.json",
|
||||||
"https://github.com/docker/buildx/releases/download/v0.10.4/buildx-v0.10.4.linux-arm-v6",
|
"https://github.com/docker/buildx/releases/download/v0.11.2/buildx-v0.11.2.linux-arm-v6",
|
||||||
"https://github.com/docker/buildx/releases/download/v0.10.4/buildx-v0.10.4.linux-arm-v6.provenance.json",
|
"https://github.com/docker/buildx/releases/download/v0.11.2/buildx-v0.11.2.linux-arm-v6.provenance.json",
|
||||||
"https://github.com/docker/buildx/releases/download/v0.10.4/buildx-v0.10.4.linux-arm-v6.sbom.json",
|
"https://github.com/docker/buildx/releases/download/v0.11.2/buildx-v0.11.2.linux-arm-v6.sbom.json",
|
||||||
"https://github.com/docker/buildx/releases/download/v0.10.4/buildx-v0.10.4.linux-arm-v7",
|
"https://github.com/docker/buildx/releases/download/v0.11.2/buildx-v0.11.2.linux-arm-v7",
|
||||||
"https://github.com/docker/buildx/releases/download/v0.10.4/buildx-v0.10.4.linux-arm-v7.provenance.json",
|
"https://github.com/docker/buildx/releases/download/v0.11.2/buildx-v0.11.2.linux-arm-v7.provenance.json",
|
||||||
"https://github.com/docker/buildx/releases/download/v0.10.4/buildx-v0.10.4.linux-arm-v7.sbom.json",
|
"https://github.com/docker/buildx/releases/download/v0.11.2/buildx-v0.11.2.linux-arm-v7.sbom.json",
|
||||||
"https://github.com/docker/buildx/releases/download/v0.10.4/buildx-v0.10.4.linux-arm64",
|
"https://github.com/docker/buildx/releases/download/v0.11.2/buildx-v0.11.2.linux-arm64",
|
||||||
"https://github.com/docker/buildx/releases/download/v0.10.4/buildx-v0.10.4.linux-arm64.provenance.json",
|
"https://github.com/docker/buildx/releases/download/v0.11.2/buildx-v0.11.2.linux-arm64.provenance.json",
|
||||||
"https://github.com/docker/buildx/releases/download/v0.10.4/buildx-v0.10.4.linux-arm64.sbom.json",
|
"https://github.com/docker/buildx/releases/download/v0.11.2/buildx-v0.11.2.linux-arm64.sbom.json",
|
||||||
"https://github.com/docker/buildx/releases/download/v0.10.4/buildx-v0.10.4.linux-ppc64le",
|
"https://github.com/docker/buildx/releases/download/v0.11.2/buildx-v0.11.2.linux-ppc64le",
|
||||||
"https://github.com/docker/buildx/releases/download/v0.10.4/buildx-v0.10.4.linux-ppc64le.provenance.json",
|
"https://github.com/docker/buildx/releases/download/v0.11.2/buildx-v0.11.2.linux-ppc64le.provenance.json",
|
||||||
"https://github.com/docker/buildx/releases/download/v0.10.4/buildx-v0.10.4.linux-ppc64le.sbom.json",
|
"https://github.com/docker/buildx/releases/download/v0.11.2/buildx-v0.11.2.linux-ppc64le.sbom.json",
|
||||||
"https://github.com/docker/buildx/releases/download/v0.10.4/buildx-v0.10.4.linux-riscv64",
|
"https://github.com/docker/buildx/releases/download/v0.11.2/buildx-v0.11.2.linux-riscv64",
|
||||||
"https://github.com/docker/buildx/releases/download/v0.10.4/buildx-v0.10.4.linux-riscv64.provenance.json",
|
"https://github.com/docker/buildx/releases/download/v0.11.2/buildx-v0.11.2.linux-riscv64.provenance.json",
|
||||||
"https://github.com/docker/buildx/releases/download/v0.10.4/buildx-v0.10.4.linux-riscv64.sbom.json",
|
"https://github.com/docker/buildx/releases/download/v0.11.2/buildx-v0.11.2.linux-riscv64.sbom.json",
|
||||||
"https://github.com/docker/buildx/releases/download/v0.10.4/buildx-v0.10.4.linux-s390x",
|
"https://github.com/docker/buildx/releases/download/v0.11.2/buildx-v0.11.2.linux-s390x",
|
||||||
"https://github.com/docker/buildx/releases/download/v0.10.4/buildx-v0.10.4.linux-s390x.provenance.json",
|
"https://github.com/docker/buildx/releases/download/v0.11.2/buildx-v0.11.2.linux-s390x.provenance.json",
|
||||||
"https://github.com/docker/buildx/releases/download/v0.10.4/buildx-v0.10.4.linux-s390x.sbom.json",
|
"https://github.com/docker/buildx/releases/download/v0.11.2/buildx-v0.11.2.linux-s390x.sbom.json",
|
||||||
"https://github.com/docker/buildx/releases/download/v0.10.4/buildx-v0.10.4.windows-amd64.exe",
|
"https://github.com/docker/buildx/releases/download/v0.11.2/buildx-v0.11.2.windows-amd64.exe",
|
||||||
"https://github.com/docker/buildx/releases/download/v0.10.4/buildx-v0.10.4.windows-amd64.provenance.json",
|
"https://github.com/docker/buildx/releases/download/v0.11.2/buildx-v0.11.2.windows-amd64.provenance.json",
|
||||||
"https://github.com/docker/buildx/releases/download/v0.10.4/buildx-v0.10.4.windows-amd64.sbom.json",
|
"https://github.com/docker/buildx/releases/download/v0.11.2/buildx-v0.11.2.windows-amd64.sbom.json",
|
||||||
"https://github.com/docker/buildx/releases/download/v0.10.4/buildx-v0.10.4.windows-arm64.exe",
|
"https://github.com/docker/buildx/releases/download/v0.11.2/buildx-v0.11.2.windows-arm64.exe",
|
||||||
"https://github.com/docker/buildx/releases/download/v0.10.4/buildx-v0.10.4.windows-arm64.provenance.json",
|
"https://github.com/docker/buildx/releases/download/v0.11.2/buildx-v0.11.2.windows-arm64.provenance.json",
|
||||||
"https://github.com/docker/buildx/releases/download/v0.10.4/buildx-v0.10.4.windows-arm64.sbom.json",
|
"https://github.com/docker/buildx/releases/download/v0.11.2/buildx-v0.11.2.windows-arm64.sbom.json",
|
||||||
"https://github.com/docker/buildx/releases/download/v0.10.4/checksums.txt"
|
"https://github.com/docker/buildx/releases/download/v0.11.2/checksums.txt"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"v0.11.2": {
|
||||||
|
"id": 112690624,
|
||||||
|
"tag_name": "v0.11.2",
|
||||||
|
"html_url": "https://github.com/docker/buildx/releases/tag/v0.11.2",
|
||||||
|
"assets": [
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.11.2/buildx-v0.11.2.darwin-amd64",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.11.2/buildx-v0.11.2.darwin-amd64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.11.2/buildx-v0.11.2.darwin-amd64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.11.2/buildx-v0.11.2.darwin-arm64",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.11.2/buildx-v0.11.2.darwin-arm64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.11.2/buildx-v0.11.2.darwin-arm64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.11.2/buildx-v0.11.2.linux-amd64",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.11.2/buildx-v0.11.2.linux-amd64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.11.2/buildx-v0.11.2.linux-amd64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.11.2/buildx-v0.11.2.linux-arm-v6",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.11.2/buildx-v0.11.2.linux-arm-v6.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.11.2/buildx-v0.11.2.linux-arm-v6.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.11.2/buildx-v0.11.2.linux-arm-v7",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.11.2/buildx-v0.11.2.linux-arm-v7.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.11.2/buildx-v0.11.2.linux-arm-v7.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.11.2/buildx-v0.11.2.linux-arm64",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.11.2/buildx-v0.11.2.linux-arm64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.11.2/buildx-v0.11.2.linux-arm64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.11.2/buildx-v0.11.2.linux-ppc64le",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.11.2/buildx-v0.11.2.linux-ppc64le.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.11.2/buildx-v0.11.2.linux-ppc64le.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.11.2/buildx-v0.11.2.linux-riscv64",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.11.2/buildx-v0.11.2.linux-riscv64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.11.2/buildx-v0.11.2.linux-riscv64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.11.2/buildx-v0.11.2.linux-s390x",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.11.2/buildx-v0.11.2.linux-s390x.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.11.2/buildx-v0.11.2.linux-s390x.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.11.2/buildx-v0.11.2.windows-amd64.exe",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.11.2/buildx-v0.11.2.windows-amd64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.11.2/buildx-v0.11.2.windows-amd64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.11.2/buildx-v0.11.2.windows-arm64.exe",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.11.2/buildx-v0.11.2.windows-arm64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.11.2/buildx-v0.11.2.windows-arm64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.11.2/checksums.txt"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"v0.11.1": {
|
||||||
|
"id": 111149999,
|
||||||
|
"tag_name": "v0.11.1",
|
||||||
|
"html_url": "https://github.com/docker/buildx/releases/tag/v0.11.1",
|
||||||
|
"assets": [
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.11.1/buildx-v0.11.1.darwin-amd64",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.11.1/buildx-v0.11.1.darwin-amd64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.11.1/buildx-v0.11.1.darwin-amd64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.11.1/buildx-v0.11.1.darwin-arm64",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.11.1/buildx-v0.11.1.darwin-arm64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.11.1/buildx-v0.11.1.darwin-arm64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.11.1/buildx-v0.11.1.linux-amd64",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.11.1/buildx-v0.11.1.linux-amd64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.11.1/buildx-v0.11.1.linux-amd64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.11.1/buildx-v0.11.1.linux-arm-v6",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.11.1/buildx-v0.11.1.linux-arm-v6.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.11.1/buildx-v0.11.1.linux-arm-v6.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.11.1/buildx-v0.11.1.linux-arm-v7",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.11.1/buildx-v0.11.1.linux-arm-v7.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.11.1/buildx-v0.11.1.linux-arm-v7.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.11.1/buildx-v0.11.1.linux-arm64",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.11.1/buildx-v0.11.1.linux-arm64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.11.1/buildx-v0.11.1.linux-arm64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.11.1/buildx-v0.11.1.linux-ppc64le",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.11.1/buildx-v0.11.1.linux-ppc64le.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.11.1/buildx-v0.11.1.linux-ppc64le.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.11.1/buildx-v0.11.1.linux-riscv64",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.11.1/buildx-v0.11.1.linux-riscv64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.11.1/buildx-v0.11.1.linux-riscv64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.11.1/buildx-v0.11.1.linux-s390x",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.11.1/buildx-v0.11.1.linux-s390x.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.11.1/buildx-v0.11.1.linux-s390x.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.11.1/buildx-v0.11.1.windows-amd64.exe",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.11.1/buildx-v0.11.1.windows-amd64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.11.1/buildx-v0.11.1.windows-amd64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.11.1/buildx-v0.11.1.windows-arm64.exe",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.11.1/buildx-v0.11.1.windows-arm64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.11.1/buildx-v0.11.1.windows-arm64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.11.1/checksums.txt"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"v0.11.0": {
|
||||||
|
"id": 108385289,
|
||||||
|
"tag_name": "v0.11.0",
|
||||||
|
"html_url": "https://github.com/docker/buildx/releases/tag/v0.11.0",
|
||||||
|
"assets": [
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.11.0/buildx-v0.11.0.darwin-amd64",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.11.0/buildx-v0.11.0.darwin-amd64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.11.0/buildx-v0.11.0.darwin-amd64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.11.0/buildx-v0.11.0.darwin-arm64",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.11.0/buildx-v0.11.0.darwin-arm64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.11.0/buildx-v0.11.0.darwin-arm64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.11.0/buildx-v0.11.0.linux-amd64",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.11.0/buildx-v0.11.0.linux-amd64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.11.0/buildx-v0.11.0.linux-amd64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.11.0/buildx-v0.11.0.linux-arm-v6",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.11.0/buildx-v0.11.0.linux-arm-v6.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.11.0/buildx-v0.11.0.linux-arm-v6.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.11.0/buildx-v0.11.0.linux-arm-v7",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.11.0/buildx-v0.11.0.linux-arm-v7.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.11.0/buildx-v0.11.0.linux-arm-v7.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.11.0/buildx-v0.11.0.linux-arm64",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.11.0/buildx-v0.11.0.linux-arm64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.11.0/buildx-v0.11.0.linux-arm64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.11.0/buildx-v0.11.0.linux-ppc64le",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.11.0/buildx-v0.11.0.linux-ppc64le.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.11.0/buildx-v0.11.0.linux-ppc64le.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.11.0/buildx-v0.11.0.linux-riscv64",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.11.0/buildx-v0.11.0.linux-riscv64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.11.0/buildx-v0.11.0.linux-riscv64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.11.0/buildx-v0.11.0.linux-s390x",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.11.0/buildx-v0.11.0.linux-s390x.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.11.0/buildx-v0.11.0.linux-s390x.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.11.0/buildx-v0.11.0.windows-amd64.exe",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.11.0/buildx-v0.11.0.windows-amd64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.11.0/buildx-v0.11.0.windows-amd64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.11.0/buildx-v0.11.0.windows-arm64.exe",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.11.0/buildx-v0.11.0.windows-arm64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.11.0/buildx-v0.11.0.windows-arm64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.11.0/checksums.txt"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"v0.11.0-rc2": {
|
||||||
|
"id": 107680036,
|
||||||
|
"tag_name": "v0.11.0-rc2",
|
||||||
|
"html_url": "https://github.com/docker/buildx/releases/tag/v0.11.0-rc2",
|
||||||
|
"assets": [
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.11.0-rc2/buildx-v0.11.0-rc2.darwin-amd64",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.11.0-rc2/buildx-v0.11.0-rc2.darwin-amd64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.11.0-rc2/buildx-v0.11.0-rc2.darwin-amd64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.11.0-rc2/buildx-v0.11.0-rc2.darwin-arm64",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.11.0-rc2/buildx-v0.11.0-rc2.darwin-arm64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.11.0-rc2/buildx-v0.11.0-rc2.darwin-arm64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.11.0-rc2/buildx-v0.11.0-rc2.linux-amd64",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.11.0-rc2/buildx-v0.11.0-rc2.linux-amd64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.11.0-rc2/buildx-v0.11.0-rc2.linux-amd64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.11.0-rc2/buildx-v0.11.0-rc2.linux-arm-v6",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.11.0-rc2/buildx-v0.11.0-rc2.linux-arm-v6.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.11.0-rc2/buildx-v0.11.0-rc2.linux-arm-v6.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.11.0-rc2/buildx-v0.11.0-rc2.linux-arm-v7",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.11.0-rc2/buildx-v0.11.0-rc2.linux-arm-v7.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.11.0-rc2/buildx-v0.11.0-rc2.linux-arm-v7.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.11.0-rc2/buildx-v0.11.0-rc2.linux-arm64",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.11.0-rc2/buildx-v0.11.0-rc2.linux-arm64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.11.0-rc2/buildx-v0.11.0-rc2.linux-arm64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.11.0-rc2/buildx-v0.11.0-rc2.linux-ppc64le",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.11.0-rc2/buildx-v0.11.0-rc2.linux-ppc64le.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.11.0-rc2/buildx-v0.11.0-rc2.linux-ppc64le.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.11.0-rc2/buildx-v0.11.0-rc2.linux-riscv64",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.11.0-rc2/buildx-v0.11.0-rc2.linux-riscv64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.11.0-rc2/buildx-v0.11.0-rc2.linux-riscv64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.11.0-rc2/buildx-v0.11.0-rc2.linux-s390x",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.11.0-rc2/buildx-v0.11.0-rc2.linux-s390x.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.11.0-rc2/buildx-v0.11.0-rc2.linux-s390x.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.11.0-rc2/buildx-v0.11.0-rc2.windows-amd64.exe",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.11.0-rc2/buildx-v0.11.0-rc2.windows-amd64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.11.0-rc2/buildx-v0.11.0-rc2.windows-amd64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.11.0-rc2/buildx-v0.11.0-rc2.windows-arm64.exe",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.11.0-rc2/buildx-v0.11.0-rc2.windows-arm64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.11.0-rc2/buildx-v0.11.0-rc2.windows-arm64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.11.0-rc2/checksums.txt"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"v0.10.5": {
|
||||||
|
"id": 103872471,
|
||||||
|
"tag_name": "v0.10.5",
|
||||||
|
"html_url": "https://github.com/docker/buildx/releases/tag/v0.10.5",
|
||||||
|
"assets": [
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.10.5/buildx-v0.10.5.darwin-amd64",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.10.5/buildx-v0.10.5.darwin-amd64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.10.5/buildx-v0.10.5.darwin-amd64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.10.5/buildx-v0.10.5.darwin-arm64",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.10.5/buildx-v0.10.5.darwin-arm64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.10.5/buildx-v0.10.5.darwin-arm64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.10.5/buildx-v0.10.5.linux-amd64",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.10.5/buildx-v0.10.5.linux-amd64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.10.5/buildx-v0.10.5.linux-amd64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.10.5/buildx-v0.10.5.linux-arm-v6",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.10.5/buildx-v0.10.5.linux-arm-v6.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.10.5/buildx-v0.10.5.linux-arm-v6.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.10.5/buildx-v0.10.5.linux-arm-v7",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.10.5/buildx-v0.10.5.linux-arm-v7.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.10.5/buildx-v0.10.5.linux-arm-v7.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.10.5/buildx-v0.10.5.linux-arm64",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.10.5/buildx-v0.10.5.linux-arm64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.10.5/buildx-v0.10.5.linux-arm64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.10.5/buildx-v0.10.5.linux-ppc64le",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.10.5/buildx-v0.10.5.linux-ppc64le.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.10.5/buildx-v0.10.5.linux-ppc64le.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.10.5/buildx-v0.10.5.linux-riscv64",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.10.5/buildx-v0.10.5.linux-riscv64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.10.5/buildx-v0.10.5.linux-riscv64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.10.5/buildx-v0.10.5.linux-s390x",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.10.5/buildx-v0.10.5.linux-s390x.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.10.5/buildx-v0.10.5.linux-s390x.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.10.5/buildx-v0.10.5.windows-amd64.exe",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.10.5/buildx-v0.10.5.windows-amd64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.10.5/buildx-v0.10.5.windows-amd64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.10.5/buildx-v0.10.5.windows-arm64.exe",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.10.5/buildx-v0.10.5.windows-arm64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.10.5/buildx-v0.10.5.windows-arm64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.10.5/checksums.txt"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"v0.11.0-rc1": {
|
||||||
|
"id": 102797153,
|
||||||
|
"tag_name": "v0.11.0-rc1",
|
||||||
|
"html_url": "https://github.com/docker/buildx/releases/tag/v0.11.0-rc1",
|
||||||
|
"assets": [
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.11.0-rc1/buildx-v0.11.0-rc1.darwin-amd64",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.11.0-rc1/buildx-v0.11.0-rc1.darwin-amd64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.11.0-rc1/buildx-v0.11.0-rc1.darwin-amd64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.11.0-rc1/buildx-v0.11.0-rc1.darwin-arm64",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.11.0-rc1/buildx-v0.11.0-rc1.darwin-arm64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.11.0-rc1/buildx-v0.11.0-rc1.darwin-arm64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.11.0-rc1/buildx-v0.11.0-rc1.linux-amd64",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.11.0-rc1/buildx-v0.11.0-rc1.linux-amd64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.11.0-rc1/buildx-v0.11.0-rc1.linux-amd64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.11.0-rc1/buildx-v0.11.0-rc1.linux-arm-v6",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.11.0-rc1/buildx-v0.11.0-rc1.linux-arm-v6.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.11.0-rc1/buildx-v0.11.0-rc1.linux-arm-v6.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.11.0-rc1/buildx-v0.11.0-rc1.linux-arm-v7",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.11.0-rc1/buildx-v0.11.0-rc1.linux-arm-v7.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.11.0-rc1/buildx-v0.11.0-rc1.linux-arm-v7.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.11.0-rc1/buildx-v0.11.0-rc1.linux-arm64",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.11.0-rc1/buildx-v0.11.0-rc1.linux-arm64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.11.0-rc1/buildx-v0.11.0-rc1.linux-arm64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.11.0-rc1/buildx-v0.11.0-rc1.linux-ppc64le",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.11.0-rc1/buildx-v0.11.0-rc1.linux-ppc64le.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.11.0-rc1/buildx-v0.11.0-rc1.linux-ppc64le.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.11.0-rc1/buildx-v0.11.0-rc1.linux-riscv64",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.11.0-rc1/buildx-v0.11.0-rc1.linux-riscv64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.11.0-rc1/buildx-v0.11.0-rc1.linux-riscv64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.11.0-rc1/buildx-v0.11.0-rc1.linux-s390x",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.11.0-rc1/buildx-v0.11.0-rc1.linux-s390x.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.11.0-rc1/buildx-v0.11.0-rc1.linux-s390x.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.11.0-rc1/buildx-v0.11.0-rc1.windows-amd64.exe",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.11.0-rc1/buildx-v0.11.0-rc1.windows-amd64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.11.0-rc1/buildx-v0.11.0-rc1.windows-amd64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.11.0-rc1/buildx-v0.11.0-rc1.windows-arm64.exe",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.11.0-rc1/buildx-v0.11.0-rc1.windows-arm64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.11.0-rc1/buildx-v0.11.0-rc1.windows-arm64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.11.0-rc1/checksums.txt"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"v0.10.4": {
|
"v0.10.4": {
|
||||||
|
|||||||
1
.github/dependabot.yml
vendored
1
.github/dependabot.yml
vendored
@@ -11,6 +11,7 @@ updates:
|
|||||||
directory: "/"
|
directory: "/"
|
||||||
schedule:
|
schedule:
|
||||||
interval: "daily"
|
interval: "daily"
|
||||||
|
versioning-strategy: "increase"
|
||||||
allow:
|
allow:
|
||||||
- dependency-type: "production"
|
- dependency-type: "production"
|
||||||
labels:
|
labels:
|
||||||
|
|||||||
102
.github/docker-releases.json
vendored
102
.github/docker-releases.json
vendored
@@ -1,8 +1,104 @@
|
|||||||
{
|
{
|
||||||
"latest": {
|
"latest": {
|
||||||
"id": 99811576,
|
"id": 120021175,
|
||||||
"tag_name": "v23.0.4",
|
"tag_name": "v24.0.6",
|
||||||
"html_url": "https://github.com/moby/moby/releases/tag/v23.0.4",
|
"html_url": "https://github.com/moby/moby/releases/tag/v24.0.6",
|
||||||
|
"assets": []
|
||||||
|
},
|
||||||
|
"v23.0.7": {
|
||||||
|
"id": 122845906,
|
||||||
|
"tag_name": "v23.0.7",
|
||||||
|
"html_url": "https://github.com/moby/moby/releases/tag/v23.0.7",
|
||||||
|
"assets": []
|
||||||
|
},
|
||||||
|
"v20.10.26": {
|
||||||
|
"id": 122843129,
|
||||||
|
"tag_name": "v20.10.26",
|
||||||
|
"html_url": "https://github.com/moby/moby/releases/tag/v20.10.26",
|
||||||
|
"assets": []
|
||||||
|
},
|
||||||
|
"v24.0.6": {
|
||||||
|
"id": 120021175,
|
||||||
|
"tag_name": "v24.0.6",
|
||||||
|
"html_url": "https://github.com/moby/moby/releases/tag/v24.0.6",
|
||||||
|
"assets": []
|
||||||
|
},
|
||||||
|
"v24.0.5": {
|
||||||
|
"id": 113348684,
|
||||||
|
"tag_name": "v24.0.5",
|
||||||
|
"html_url": "https://github.com/moby/moby/releases/tag/v24.0.5",
|
||||||
|
"assets": []
|
||||||
|
},
|
||||||
|
"v24.0.4": {
|
||||||
|
"id": 111464537,
|
||||||
|
"tag_name": "v24.0.4",
|
||||||
|
"html_url": "https://github.com/moby/moby/releases/tag/v24.0.4",
|
||||||
|
"assets": []
|
||||||
|
},
|
||||||
|
"v24.0.3": {
|
||||||
|
"id": 111300256,
|
||||||
|
"tag_name": "v24.0.3",
|
||||||
|
"html_url": "https://github.com/moby/moby/releases/tag/v24.0.3",
|
||||||
|
"assets": []
|
||||||
|
},
|
||||||
|
"v24.0.2": {
|
||||||
|
"id": 104366762,
|
||||||
|
"tag_name": "v24.0.2",
|
||||||
|
"html_url": "https://github.com/moby/moby/releases/tag/v24.0.2",
|
||||||
|
"assets": []
|
||||||
|
},
|
||||||
|
"v24.0.1": {
|
||||||
|
"id": 103671743,
|
||||||
|
"tag_name": "v24.0.1",
|
||||||
|
"html_url": "https://github.com/moby/moby/releases/tag/v24.0.1",
|
||||||
|
"assets": []
|
||||||
|
},
|
||||||
|
"v24.0.0": {
|
||||||
|
"id": 103200193,
|
||||||
|
"tag_name": "v24.0.0",
|
||||||
|
"html_url": "https://github.com/moby/moby/releases/tag/v24.0.0",
|
||||||
|
"assets": []
|
||||||
|
},
|
||||||
|
"v20.10.25": {
|
||||||
|
"id": 103070540,
|
||||||
|
"tag_name": "v20.10.25",
|
||||||
|
"html_url": "https://github.com/moby/moby/releases/tag/v20.10.25",
|
||||||
|
"assets": []
|
||||||
|
},
|
||||||
|
"v24.0.0-rc.4": {
|
||||||
|
"id": 102846110,
|
||||||
|
"tag_name": "v24.0.0-rc.4",
|
||||||
|
"html_url": "https://github.com/moby/moby/releases/tag/v24.0.0-rc.4",
|
||||||
|
"assets": []
|
||||||
|
},
|
||||||
|
"v24.0.0-rc.3": {
|
||||||
|
"id": 102708870,
|
||||||
|
"tag_name": "v24.0.0-rc.3",
|
||||||
|
"html_url": "https://github.com/moby/moby/releases/tag/v24.0.0-rc.3",
|
||||||
|
"assets": []
|
||||||
|
},
|
||||||
|
"v23.0.6": {
|
||||||
|
"id": 102196340,
|
||||||
|
"tag_name": "v23.0.6",
|
||||||
|
"html_url": "https://github.com/moby/moby/releases/tag/v23.0.6",
|
||||||
|
"assets": []
|
||||||
|
},
|
||||||
|
"v24.0.0-rc.2": {
|
||||||
|
"id": 102091676,
|
||||||
|
"tag_name": "v24.0.0-rc.2",
|
||||||
|
"html_url": "https://github.com/moby/moby/releases/tag/v24.0.0-rc.2",
|
||||||
|
"assets": []
|
||||||
|
},
|
||||||
|
"v24.0.0-rc.1": {
|
||||||
|
"id": 101305950,
|
||||||
|
"tag_name": "v24.0.0-rc.1",
|
||||||
|
"html_url": "https://github.com/moby/moby/releases/tag/v24.0.0-rc.1",
|
||||||
|
"assets": []
|
||||||
|
},
|
||||||
|
"v23.0.5": {
|
||||||
|
"id": 101005794,
|
||||||
|
"tag_name": "v23.0.5",
|
||||||
|
"html_url": "https://github.com/moby/moby/releases/tag/v23.0.5",
|
||||||
"assets": []
|
"assets": []
|
||||||
},
|
},
|
||||||
"v23.0.4": {
|
"v23.0.4": {
|
||||||
|
|||||||
4
.github/workflows/build.yml
vendored
4
.github/workflows/build.yml
vendored
@@ -18,9 +18,9 @@ jobs:
|
|||||||
steps:
|
steps:
|
||||||
-
|
-
|
||||||
name: Checkout
|
name: Checkout
|
||||||
uses: actions/checkout@v3
|
uses: actions/checkout@v4
|
||||||
-
|
-
|
||||||
name: Build
|
name: Build
|
||||||
uses: docker/bake-action@v2
|
uses: docker/bake-action@v4
|
||||||
with:
|
with:
|
||||||
targets: build
|
targets: build
|
||||||
|
|||||||
58
.github/workflows/buildx-lab-releases-json.yml
vendored
Normal file
58
.github/workflows/buildx-lab-releases-json.yml
vendored
Normal file
@@ -0,0 +1,58 @@
|
|||||||
|
name: buildx-lab-releases-json
|
||||||
|
|
||||||
|
concurrency:
|
||||||
|
group: ${{ github.workflow }}-${{ github.ref }}
|
||||||
|
cancel-in-progress: true
|
||||||
|
|
||||||
|
on:
|
||||||
|
workflow_dispatch:
|
||||||
|
schedule:
|
||||||
|
- cron: '0 */12 * * *'
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- 'main'
|
||||||
|
pull_request:
|
||||||
|
paths-ignore:
|
||||||
|
- '.github/*-releases.json'
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
generate:
|
||||||
|
uses: crazy-max/.github/.github/workflows/releases-json.yml@6dc31870ca6c4f8489bf5a408ab38fae60f47eec
|
||||||
|
with:
|
||||||
|
repository: docker/buildx-desktop
|
||||||
|
artifact_name: buildx-lab-releases-json
|
||||||
|
filename: buildx-lab-releases.json
|
||||||
|
secrets: inherit
|
||||||
|
|
||||||
|
open-pr:
|
||||||
|
runs-on: ubuntu-22.04
|
||||||
|
if: github.event_name != 'pull_request'
|
||||||
|
needs:
|
||||||
|
- generate
|
||||||
|
steps:
|
||||||
|
-
|
||||||
|
name: Checkout
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
-
|
||||||
|
name: Download
|
||||||
|
uses: actions/download-artifact@v3
|
||||||
|
with:
|
||||||
|
name: buildx-lab-releases-json
|
||||||
|
path: .github
|
||||||
|
-
|
||||||
|
name: Commit changes
|
||||||
|
run: |
|
||||||
|
git add -A .
|
||||||
|
-
|
||||||
|
name: Create PR
|
||||||
|
uses: peter-evans/create-pull-request@153407881ec5c347639a548ade7d8ad1d6740e38
|
||||||
|
with:
|
||||||
|
base: main
|
||||||
|
branch: bot/buildx-lab-releases-json
|
||||||
|
commit-message: "github: update .github/buildx-lab-releases.json"
|
||||||
|
signoff: true
|
||||||
|
delete-branch: true
|
||||||
|
title: "Update `.github/buildx-lab-releases.json`"
|
||||||
|
body: |
|
||||||
|
Update `.github/buildx-lab-releases.json` to keep in sync with [https://github.com/docker/buildx-desktop](https://github.com/docker/buildx-desktop).
|
||||||
|
draft: false
|
||||||
4
.github/workflows/buildx-releases-json.yml
vendored
4
.github/workflows/buildx-releases-json.yml
vendored
@@ -32,7 +32,7 @@ jobs:
|
|||||||
steps:
|
steps:
|
||||||
-
|
-
|
||||||
name: Checkout
|
name: Checkout
|
||||||
uses: actions/checkout@v3
|
uses: actions/checkout@v4
|
||||||
-
|
-
|
||||||
name: Download
|
name: Download
|
||||||
uses: actions/download-artifact@v3
|
uses: actions/download-artifact@v3
|
||||||
@@ -45,7 +45,7 @@ jobs:
|
|||||||
git add -A .
|
git add -A .
|
||||||
-
|
-
|
||||||
name: Create PR
|
name: Create PR
|
||||||
uses: peter-evans/create-pull-request@5b4a9f6a9e2af26e5f02351490b90d01eb8ec1e5
|
uses: peter-evans/create-pull-request@153407881ec5c347639a548ade7d8ad1d6740e38
|
||||||
with:
|
with:
|
||||||
base: main
|
base: main
|
||||||
branch: bot/buildx-releases-json
|
branch: bot/buildx-releases-json
|
||||||
|
|||||||
4
.github/workflows/docker-releases-json.yml
vendored
4
.github/workflows/docker-releases-json.yml
vendored
@@ -32,7 +32,7 @@ jobs:
|
|||||||
steps:
|
steps:
|
||||||
-
|
-
|
||||||
name: Checkout
|
name: Checkout
|
||||||
uses: actions/checkout@v3
|
uses: actions/checkout@v4
|
||||||
-
|
-
|
||||||
name: Download
|
name: Download
|
||||||
uses: actions/download-artifact@v3
|
uses: actions/download-artifact@v3
|
||||||
@@ -45,7 +45,7 @@ jobs:
|
|||||||
git add -A .
|
git add -A .
|
||||||
-
|
-
|
||||||
name: Create PR
|
name: Create PR
|
||||||
uses: peter-evans/create-pull-request@5b4a9f6a9e2af26e5f02351490b90d01eb8ec1e5
|
uses: peter-evans/create-pull-request@153407881ec5c347639a548ade7d8ad1d6740e38
|
||||||
with:
|
with:
|
||||||
base: main
|
base: main
|
||||||
branch: bot/docker-releases-json
|
branch: bot/docker-releases-json
|
||||||
|
|||||||
6
.github/workflows/publish.yml
vendored
6
.github/workflows/publish.yml
vendored
@@ -15,13 +15,13 @@ jobs:
|
|||||||
steps:
|
steps:
|
||||||
-
|
-
|
||||||
name: Checkout
|
name: Checkout
|
||||||
uses: actions/checkout@v3
|
uses: actions/checkout@v4
|
||||||
-
|
-
|
||||||
name: Set up Docker Buildx
|
name: Set up Docker Buildx
|
||||||
uses: docker/setup-buildx-action@v2
|
uses: docker/setup-buildx-action@v3
|
||||||
-
|
-
|
||||||
name: Publish
|
name: Publish
|
||||||
uses: docker/bake-action@v2
|
uses: docker/bake-action@v4
|
||||||
with:
|
with:
|
||||||
targets: publish
|
targets: publish
|
||||||
env:
|
env:
|
||||||
|
|||||||
8
.github/workflows/test.yml
vendored
8
.github/workflows/test.yml
vendored
@@ -19,10 +19,10 @@ jobs:
|
|||||||
steps:
|
steps:
|
||||||
-
|
-
|
||||||
name: Checkout
|
name: Checkout
|
||||||
uses: actions/checkout@v3
|
uses: actions/checkout@v4
|
||||||
-
|
-
|
||||||
name: Test
|
name: Test
|
||||||
uses: docker/bake-action@v2
|
uses: docker/bake-action@v4
|
||||||
with:
|
with:
|
||||||
targets: test-coverage
|
targets: test-coverage
|
||||||
env:
|
env:
|
||||||
@@ -41,7 +41,7 @@ jobs:
|
|||||||
steps:
|
steps:
|
||||||
-
|
-
|
||||||
name: Checkout
|
name: Checkout
|
||||||
uses: actions/checkout@v3
|
uses: actions/checkout@v4
|
||||||
-
|
-
|
||||||
name: Setup Node
|
name: Setup Node
|
||||||
uses: actions/setup-node@v3
|
uses: actions/setup-node@v3
|
||||||
@@ -85,7 +85,7 @@ jobs:
|
|||||||
steps:
|
steps:
|
||||||
-
|
-
|
||||||
name: Checkout
|
name: Checkout
|
||||||
uses: actions/checkout@v3
|
uses: actions/checkout@v4
|
||||||
-
|
-
|
||||||
name: Setup Node
|
name: Setup Node
|
||||||
uses: actions/setup-node@v3
|
uses: actions/setup-node@v3
|
||||||
|
|||||||
6
.github/workflows/validate.yml
vendored
6
.github/workflows/validate.yml
vendored
@@ -21,7 +21,7 @@ jobs:
|
|||||||
steps:
|
steps:
|
||||||
-
|
-
|
||||||
name: Checkout
|
name: Checkout
|
||||||
uses: actions/checkout@v3
|
uses: actions/checkout@v4
|
||||||
-
|
-
|
||||||
name: Matrix
|
name: Matrix
|
||||||
id: targets
|
id: targets
|
||||||
@@ -39,9 +39,9 @@ jobs:
|
|||||||
steps:
|
steps:
|
||||||
-
|
-
|
||||||
name: Checkout
|
name: Checkout
|
||||||
uses: actions/checkout@v3
|
uses: actions/checkout@v4
|
||||||
-
|
-
|
||||||
name: Validate
|
name: Validate
|
||||||
uses: docker/bake-action@v2
|
uses: docker/bake-action@v4
|
||||||
with:
|
with:
|
||||||
targets: ${{ matrix.target }}
|
targets: ${{ matrix.target }}
|
||||||
|
|||||||
222
.yarn/plugins/@yarnpkg/plugin-interactive-tools.cjs
vendored
222
.yarn/plugins/@yarnpkg/plugin-interactive-tools.cjs
vendored
File diff suppressed because one or more lines are too long
823
.yarn/releases/yarn-3.3.1.cjs
vendored
823
.yarn/releases/yarn-3.3.1.cjs
vendored
File diff suppressed because one or more lines are too long
874
.yarn/releases/yarn-3.6.3.cjs
vendored
Normal file
874
.yarn/releases/yarn-3.6.3.cjs
vendored
Normal file
File diff suppressed because one or more lines are too long
11
.yarnrc.yml
11
.yarnrc.yml
@@ -1,16 +1,15 @@
|
|||||||
nodeLinker: node-modules
|
|
||||||
|
|
||||||
npmAuthToken: "${NODE_AUTH_TOKEN:-fallback}"
|
|
||||||
|
|
||||||
logFilters:
|
logFilters:
|
||||||
# https://yarnpkg.com/advanced/error-codes
|
|
||||||
- code: YN0013
|
- code: YN0013
|
||||||
level: discard
|
level: discard
|
||||||
- code: YN0076
|
- code: YN0076
|
||||||
level: discard
|
level: discard
|
||||||
|
|
||||||
|
nodeLinker: node-modules
|
||||||
|
|
||||||
|
npmAuthToken: "${NODE_AUTH_TOKEN:-fallback}"
|
||||||
|
|
||||||
plugins:
|
plugins:
|
||||||
- path: .yarn/plugins/@yarnpkg/plugin-interactive-tools.cjs
|
- path: .yarn/plugins/@yarnpkg/plugin-interactive-tools.cjs
|
||||||
spec: "@yarnpkg/plugin-interactive-tools"
|
spec: "@yarnpkg/plugin-interactive-tools"
|
||||||
|
|
||||||
yarnPath: .yarn/releases/yarn-3.3.1.cjs
|
yarnPath: .yarn/releases/yarn-3.6.3.cjs
|
||||||
|
|||||||
@@ -210,6 +210,189 @@ describe('parseInspect', () => {
|
|||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'inspect8.txt',
|
||||||
|
{
|
||||||
|
"name": "builder-52aa0611-faf0-42ac-a940-461e4e287d68",
|
||||||
|
"driver": "docker-container",
|
||||||
|
"lastActivity": new Date("2023-06-13T13:52:31.000Z"),
|
||||||
|
"nodes": [
|
||||||
|
{
|
||||||
|
"buildkit": "v0.11.6",
|
||||||
|
"buildkitd-flags": "--debug --allow-insecure-entitlement security.insecure --allow-insecure-entitlement network.host",
|
||||||
|
"driver-opts": [
|
||||||
|
"image=moby/buildkit:buildx-stable-1",
|
||||||
|
"network=host",
|
||||||
|
],
|
||||||
|
"endpoint": "unix:///var/run/docker.sock",
|
||||||
|
"name": "builder-52aa0611-faf0-42ac-a940-461e4e287d680",
|
||||||
|
"platforms": "linux/amd64,linux/amd64/v2,linux/amd64/v3,linux/amd64/v4,linux/arm64,linux/riscv64,linux/ppc64le,linux/s390x,linux/386,linux/mips64le,linux/mips64,linux/arm/v7,linux/arm/v6",
|
||||||
|
"status": "running",
|
||||||
|
"labels": {
|
||||||
|
"org.mobyproject.buildkit.worker.executor": "oci",
|
||||||
|
"org.mobyproject.buildkit.worker.hostname": "fv-az572-38",
|
||||||
|
"org.mobyproject.buildkit.worker.network": "host",
|
||||||
|
"org.mobyproject.buildkit.worker.oci.process-mode": "sandbox",
|
||||||
|
"org.mobyproject.buildkit.worker.selinux.enabled": "false",
|
||||||
|
"org.mobyproject.buildkit.worker.snapshotter": "overlayfs",
|
||||||
|
},
|
||||||
|
"gcPolicy": [
|
||||||
|
{
|
||||||
|
"all": false,
|
||||||
|
"filter": [
|
||||||
|
"type==source.local",
|
||||||
|
"type==exec.cachemount",
|
||||||
|
"type==source.git.checkout"
|
||||||
|
],
|
||||||
|
"keepDuration": "48h0m0s",
|
||||||
|
"keepBytes": "488.3MiB",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"all": false,
|
||||||
|
"keepDuration": "1440h0m0s",
|
||||||
|
"keepBytes": "8.382GiB",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"all": false,
|
||||||
|
"keepBytes": "8.382GiB",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"all": true,
|
||||||
|
"keepBytes": "8.382GiB",
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'inspect9.txt',
|
||||||
|
{
|
||||||
|
"name": "default",
|
||||||
|
"driver": "docker",
|
||||||
|
"lastActivity": new Date("2023-06-13T18:13:43.000Z"),
|
||||||
|
"nodes": [
|
||||||
|
{
|
||||||
|
"buildkit": "v0.11.7-0.20230525183624-798ad6b0ce9f",
|
||||||
|
"endpoint": "default",
|
||||||
|
"name": "default",
|
||||||
|
"platforms": "linux/amd64,linux/amd64/v2,linux/amd64/v3,linux/arm64,linux/riscv64,linux/ppc64le,linux/s390x,linux/386,linux/mips64le,linux/mips64,linux/arm/v7,linux/arm/v6",
|
||||||
|
"status": "running",
|
||||||
|
"gcPolicy": [
|
||||||
|
{
|
||||||
|
"all": true,
|
||||||
|
"keepBytes": "100GiB",
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'inspect10.txt',
|
||||||
|
{
|
||||||
|
"name": "remote-builder",
|
||||||
|
"driver": "remote",
|
||||||
|
"lastActivity": new Date("2023-04-20T12:47:49.000Z"),
|
||||||
|
"nodes": [
|
||||||
|
{
|
||||||
|
"name": "remote-builder0",
|
||||||
|
"endpoint": "docker-container://buildx_buildkit_dk-remote-builder0",
|
||||||
|
"status": "inactive"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "aws_graviton2",
|
||||||
|
"endpoint": "tcp://10.0.0.1:1234",
|
||||||
|
"driver-opts": [
|
||||||
|
"cacert=/home/user/.certs/aws_graviton2/ca.pem",
|
||||||
|
"cert=/home/user/.certs/aws_graviton2/cert.pem",
|
||||||
|
"key=/home/user/.certs/aws_graviton2/key.pem"
|
||||||
|
],
|
||||||
|
"status": "running",
|
||||||
|
"buildkit": "v0.11.6",
|
||||||
|
"platforms": "darwin/arm64,linux/arm64,linux/arm/v5,linux/arm/v6,linux/arm/v7,windows/arm64",
|
||||||
|
"labels": {
|
||||||
|
"org.mobyproject.buildkit.worker.executor": "oci",
|
||||||
|
"org.mobyproject.buildkit.worker.hostname": "77ebc22e2d82",
|
||||||
|
"org.mobyproject.buildkit.worker.network": "host",
|
||||||
|
"org.mobyproject.buildkit.worker.oci.process-mode": "sandbox",
|
||||||
|
"org.mobyproject.buildkit.worker.selinux.enabled": "false",
|
||||||
|
"org.mobyproject.buildkit.worker.snapshotter": "overlayfs"
|
||||||
|
},
|
||||||
|
"gcPolicy": [
|
||||||
|
{
|
||||||
|
"all": false,
|
||||||
|
"filter": [
|
||||||
|
"type==source.local",
|
||||||
|
"type==exec.cachemount",
|
||||||
|
"type==source.git.checkout"
|
||||||
|
],
|
||||||
|
"keepDuration": "48h0m0s",
|
||||||
|
"keepBytes": "488.3MiB"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"all": false,
|
||||||
|
"keepDuration": "1440h0m0s",
|
||||||
|
"keepBytes": "23.28GiB"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"all": false,
|
||||||
|
"keepBytes": "23.28GiB"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"all": true,
|
||||||
|
"keepBytes": "23.28GiB"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "linuxone_s390x",
|
||||||
|
"endpoint": "tcp://10.0.0.2:1234",
|
||||||
|
"driver-opts": [
|
||||||
|
"cacert=/home/user/.certs/linuxone_s390x/ca.pem",
|
||||||
|
"cert=/home/user/.certs/linuxone_s390x/cert.pem",
|
||||||
|
"key=/home/user/.certs/linuxone_s390x/key.pem"
|
||||||
|
],
|
||||||
|
"status": "running",
|
||||||
|
"buildkit": "v0.11.6",
|
||||||
|
"platforms": "linux/s390x",
|
||||||
|
"labels": {
|
||||||
|
"org.mobyproject.buildkit.worker.executor": "oci",
|
||||||
|
"org.mobyproject.buildkit.worker.hostname": "9d0d62a96818",
|
||||||
|
"org.mobyproject.buildkit.worker.network": "host",
|
||||||
|
"org.mobyproject.buildkit.worker.oci.process-mode": "sandbox",
|
||||||
|
"org.mobyproject.buildkit.worker.selinux.enabled": "false",
|
||||||
|
"org.mobyproject.buildkit.worker.snapshotter": "overlayfs"
|
||||||
|
},
|
||||||
|
"gcPolicy": [
|
||||||
|
{
|
||||||
|
"all": false,
|
||||||
|
"keepBytes": "488.3MiB",
|
||||||
|
"filter": [
|
||||||
|
"type==source.local",
|
||||||
|
"type==exec.cachemount",
|
||||||
|
"type==source.git.checkout"
|
||||||
|
],
|
||||||
|
"keepDuration": "48h0m0s"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"all": false,
|
||||||
|
"keepDuration": "1440h0m0s",
|
||||||
|
"keepBytes": "9.313GiB"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"all": false,
|
||||||
|
"keepBytes": "9.313GiB"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"all": true,
|
||||||
|
"keepBytes": "9.313GiB"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
}
|
||||||
]
|
]
|
||||||
])('given %p', async (inspectFile, expected) => {
|
])('given %p', async (inspectFile, expected) => {
|
||||||
expect(await Builder.parseInspect(fs.readFileSync(path.join(fixturesDir, inspectFile)).toString())).toEqual(expected);
|
expect(await Builder.parseInspect(fs.readFileSync(path.join(fixturesDir, inspectFile)).toString())).toEqual(expected);
|
||||||
|
|||||||
@@ -177,6 +177,21 @@ describe('resolveBuildSecret', () => {
|
|||||||
expect(e.message).toEqual(error?.message);
|
expect(e.message).toEqual(error?.message);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
test.each([
|
||||||
|
['FOO=bar', 'FOO', 'bar', null],
|
||||||
|
['FOO=', 'FOO', '', new Error('FOO= is not a valid secret')],
|
||||||
|
['=bar', '', '', new Error('=bar is not a valid secret')],
|
||||||
|
['FOO=bar=baz', 'FOO', 'bar=baz', null]
|
||||||
|
])('given %p key and %p env', async (kvp: string, exKey: string, exValue: string, error: Error | null) => {
|
||||||
|
try {
|
||||||
|
const secret = Inputs.resolveBuildSecretEnv(kvp);
|
||||||
|
expect(secret).toEqual(`id=${exKey},env=${exValue}`);
|
||||||
|
} catch (e) {
|
||||||
|
// eslint-disable-next-line jest/no-conditional-expect
|
||||||
|
expect(e.message).toEqual(error?.message);
|
||||||
|
}
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('hasLocalExporter', () => {
|
describe('hasLocalExporter', () => {
|
||||||
|
|||||||
@@ -36,9 +36,8 @@ afterEach(function () {
|
|||||||
describe('download', () => {
|
describe('download', () => {
|
||||||
// prettier-ignore
|
// prettier-ignore
|
||||||
test.each([
|
test.each([
|
||||||
['v0.9.1', false],
|
['v0.9.0', false],
|
||||||
['latest', false],
|
['v0.10.5', true],
|
||||||
['v0.9.1', true],
|
|
||||||
['latest', true]
|
['latest', true]
|
||||||
])(
|
])(
|
||||||
'acquires %p of buildx (standalone: %p)', async (version, standalone) => {
|
'acquires %p of buildx (standalone: %p)', async (version, standalone) => {
|
||||||
@@ -56,6 +55,18 @@ describe('download', () => {
|
|||||||
100000
|
100000
|
||||||
);
|
);
|
||||||
|
|
||||||
|
// prettier-ignore
|
||||||
|
test.each([
|
||||||
|
// following versions are already cached to htc from previous test cases
|
||||||
|
['v0.9.0'],
|
||||||
|
['v0.10.5'],
|
||||||
|
])(
|
||||||
|
'acquires %p of buildx with cache', async (version) => {
|
||||||
|
const install = new Install({standalone: false});
|
||||||
|
const toolPath = await install.download(version);
|
||||||
|
expect(fs.existsSync(toolPath)).toBe(true);
|
||||||
|
});
|
||||||
|
|
||||||
// TODO: add tests for arm
|
// TODO: add tests for arm
|
||||||
// prettier-ignore
|
// prettier-ignore
|
||||||
test.each([
|
test.each([
|
||||||
@@ -77,12 +88,6 @@ describe('download', () => {
|
|||||||
},
|
},
|
||||||
100000
|
100000
|
||||||
);
|
);
|
||||||
|
|
||||||
it('returns latest buildx GitHub release', async () => {
|
|
||||||
const release = await Install.getRelease('latest');
|
|
||||||
expect(release).not.toBeNull();
|
|
||||||
expect(release?.tag_name).not.toEqual('');
|
|
||||||
});
|
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('build', () => {
|
describe('build', () => {
|
||||||
@@ -105,30 +110,72 @@ describe('build', () => {
|
|||||||
}, 100000);
|
}, 100000);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
describe('getDownloadVersion', () => {
|
||||||
|
it('returns official latest download version', async () => {
|
||||||
|
const version = await Install.getDownloadVersion('latest');
|
||||||
|
expect(version.key).toEqual('official');
|
||||||
|
expect(version.version).toEqual('latest');
|
||||||
|
expect(version.downloadURL).toEqual('https://github.com/docker/buildx/releases/download/v%s/%s');
|
||||||
|
expect(version.releasesURL).toEqual('https://raw.githubusercontent.com/docker/actions-toolkit/main/.github/buildx-releases.json');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('returns official v0.10.1 download version', async () => {
|
||||||
|
const version = await Install.getDownloadVersion('v0.10.1');
|
||||||
|
expect(version.key).toEqual('official');
|
||||||
|
expect(version.version).toEqual('v0.10.1');
|
||||||
|
expect(version.downloadURL).toEqual('https://github.com/docker/buildx/releases/download/v%s/%s');
|
||||||
|
expect(version.releasesURL).toEqual('https://raw.githubusercontent.com/docker/actions-toolkit/main/.github/buildx-releases.json');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('returns lab latest download version', async () => {
|
||||||
|
const version = await Install.getDownloadVersion('lab:latest');
|
||||||
|
expect(version.key).toEqual('lab');
|
||||||
|
expect(version.version).toEqual('latest');
|
||||||
|
expect(version.downloadURL).toEqual('https://github.com/docker/buildx-desktop/releases/download/v%s/%s');
|
||||||
|
expect(version.releasesURL).toEqual('https://raw.githubusercontent.com/docker/actions-toolkit/main/.github/buildx-lab-releases.json');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('returns lab v0.11.2-desktop.2 download version', async () => {
|
||||||
|
const version = await Install.getDownloadVersion('lab:v0.11.2-desktop.2');
|
||||||
|
expect(version.key).toEqual('lab');
|
||||||
|
expect(version.version).toEqual('v0.11.2-desktop.2');
|
||||||
|
expect(version.downloadURL).toEqual('https://github.com/docker/buildx-desktop/releases/download/v%s/%s');
|
||||||
|
expect(version.releasesURL).toEqual('https://raw.githubusercontent.com/docker/actions-toolkit/main/.github/buildx-lab-releases.json');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('unknown repo', async () => {
|
||||||
|
await expect(Install.getDownloadVersion('foo:bar')).rejects.toThrow(new Error('Cannot find buildx version for foo:bar'));
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
describe('getRelease', () => {
|
describe('getRelease', () => {
|
||||||
it('returns latest buildx GitHub release', async () => {
|
it('returns latest official GitHub release', async () => {
|
||||||
const release = await Install.getRelease('latest');
|
const version = await Install.getDownloadVersion('latest');
|
||||||
|
const release = await Install.getRelease(version);
|
||||||
expect(release).not.toBeNull();
|
expect(release).not.toBeNull();
|
||||||
expect(release?.tag_name).not.toEqual('');
|
expect(release?.tag_name).not.toEqual('');
|
||||||
});
|
});
|
||||||
|
|
||||||
it('returns v0.10.1 buildx GitHub release', async () => {
|
it('returns v0.10.1 official GitHub release', async () => {
|
||||||
const release = await Install.getRelease('v0.10.1');
|
const version = await Install.getDownloadVersion('v0.10.1');
|
||||||
|
const release = await Install.getRelease(version);
|
||||||
expect(release).not.toBeNull();
|
expect(release).not.toBeNull();
|
||||||
expect(release?.id).toEqual(90346950);
|
expect(release?.id).toEqual(90346950);
|
||||||
expect(release?.tag_name).toEqual('v0.10.1');
|
expect(release?.tag_name).toEqual('v0.10.1');
|
||||||
expect(release?.html_url).toEqual('https://github.com/docker/buildx/releases/tag/v0.10.1');
|
expect(release?.html_url).toEqual('https://github.com/docker/buildx/releases/tag/v0.10.1');
|
||||||
});
|
});
|
||||||
|
|
||||||
it('returns v0.2.2 buildx GitHub release', async () => {
|
it('returns v0.11.2-desktop.2 lab GitHub release', async () => {
|
||||||
const release = await Install.getRelease('v0.2.2');
|
const version = await Install.getDownloadVersion('lab:v0.11.2-desktop.2');
|
||||||
|
const release = await Install.getRelease(version);
|
||||||
expect(release).not.toBeNull();
|
expect(release).not.toBeNull();
|
||||||
expect(release?.id).toEqual(17671545);
|
expect(release?.id).toEqual(118213369);
|
||||||
expect(release?.tag_name).toEqual('v0.2.2');
|
expect(release?.tag_name).toEqual('v0.11.2-desktop.2');
|
||||||
expect(release?.html_url).toEqual('https://github.com/docker/buildx/releases/tag/v0.2.2');
|
expect(release?.html_url).toEqual('https://github.com/docker/buildx-desktop/releases/tag/v0.11.2-desktop.2');
|
||||||
});
|
});
|
||||||
|
|
||||||
it('unknown release', async () => {
|
it('unknown release', async () => {
|
||||||
await expect(Install.getRelease('foo')).rejects.toThrow(new Error('Cannot find Buildx release foo in https://raw.githubusercontent.com/docker/actions-toolkit/main/.github/buildx-releases.json'));
|
const version = await Install.getDownloadVersion('foo');
|
||||||
|
await expect(Install.getRelease(version)).rejects.toThrow(new Error('Cannot find Buildx release foo in https://raw.githubusercontent.com/docker/actions-toolkit/main/.github/buildx-releases.json'));
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -15,17 +15,30 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
import {afterEach, beforeEach, describe, expect, it, jest} from '@jest/globals';
|
import {afterEach, beforeEach, describe, expect, it, jest} from '@jest/globals';
|
||||||
|
import * as fs from 'fs';
|
||||||
import path from 'path';
|
import path from 'path';
|
||||||
import * as io from '@actions/io';
|
import * as io from '@actions/io';
|
||||||
import osm = require('os');
|
import osm = require('os');
|
||||||
|
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';
|
||||||
|
|
||||||
|
const fixturesDir = path.join(__dirname, '..', 'fixtures');
|
||||||
|
|
||||||
|
// prettier-ignore
|
||||||
|
const tmpDir = path.join(process.env.TEMP || '/tmp', 'docker-jest');
|
||||||
|
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
jest.clearAllMocks();
|
jest.clearAllMocks();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
afterEach(function () {
|
||||||
|
rimraf.sync(tmpDir);
|
||||||
|
});
|
||||||
|
|
||||||
describe('configDir', () => {
|
describe('configDir', () => {
|
||||||
const originalEnv = process.env;
|
const originalEnv = process.env;
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
@@ -48,6 +61,45 @@ describe('configDir', () => {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
describe('configFile', () => {
|
||||||
|
const originalEnv = process.env;
|
||||||
|
beforeEach(() => {
|
||||||
|
jest.resetModules();
|
||||||
|
if (!fs.existsSync(tmpDir)) {
|
||||||
|
fs.mkdirSync(tmpDir, {recursive: true});
|
||||||
|
}
|
||||||
|
process.env = {
|
||||||
|
...originalEnv,
|
||||||
|
DOCKER_CONFIG: tmpDir
|
||||||
|
};
|
||||||
|
});
|
||||||
|
afterEach(() => {
|
||||||
|
process.env = originalEnv;
|
||||||
|
});
|
||||||
|
it('auths', async () => {
|
||||||
|
fs.copyFileSync(path.join(fixturesDir, 'docker-config-auths.json'), path.join(tmpDir, 'config.json'));
|
||||||
|
expect(Docker.configFile()).toEqual({
|
||||||
|
auths: {
|
||||||
|
'https://index.docker.io/v1/': {
|
||||||
|
auth: 'am9lam9lOmhlbGxv',
|
||||||
|
email: 'user@example.com'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} as unknown as ConfigFile);
|
||||||
|
});
|
||||||
|
it('proxies', async () => {
|
||||||
|
fs.copyFileSync(path.join(fixturesDir, 'docker-config-proxies.json'), path.join(tmpDir, 'config.json'));
|
||||||
|
expect(Docker.configFile()).toEqual({
|
||||||
|
proxies: {
|
||||||
|
default: {
|
||||||
|
httpProxy: 'http://127.0.0.1:3128',
|
||||||
|
httpsProxy: 'http://127.0.0.1:3128'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} as unknown as ConfigFile);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
describe('isAvailable', () => {
|
describe('isAvailable', () => {
|
||||||
it('cli', async () => {
|
it('cli', async () => {
|
||||||
const ioWhichSpy = jest.spyOn(io, 'which');
|
const ioWhichSpy = jest.spyOn(io, 'which');
|
||||||
|
|||||||
@@ -15,7 +15,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
import path from 'path';
|
import path from 'path';
|
||||||
import {jest, describe, expect, test} from '@jest/globals';
|
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';
|
||||||
@@ -24,15 +24,27 @@ import {Docker} from '../../src/docker/docker';
|
|||||||
const tmpDir = path.join(process.env.TEMP || '/tmp', 'docker-install-jest');
|
const tmpDir = path.join(process.env.TEMP || '/tmp', 'docker-install-jest');
|
||||||
|
|
||||||
describe('install', () => {
|
describe('install', () => {
|
||||||
jest.retryTimes(2, {logErrorsBeforeRetry: true});
|
const originalEnv = process.env;
|
||||||
|
beforeEach(() => {
|
||||||
|
jest.resetModules();
|
||||||
|
process.env = {
|
||||||
|
...originalEnv,
|
||||||
|
SIGN_QEMU_BINARY: '1',
|
||||||
|
COLIMA_START_ARGS: '--cpu 4 --memory 8 --disk 32 --dns 1.1.1.1 --dns 8.8.8.8 --dns-host example.com=1.2.3.4'
|
||||||
|
};
|
||||||
|
});
|
||||||
|
afterEach(() => {
|
||||||
|
process.env = originalEnv;
|
||||||
|
});
|
||||||
// prettier-ignore
|
// prettier-ignore
|
||||||
test.each(['v23.0.0'])(
|
test.each(['v24.0.4'])(
|
||||||
'install docker %s', async (version) => {
|
'install docker %s', async (version) => {
|
||||||
await expect((async () => {
|
await expect((async () => {
|
||||||
const install = new Install({
|
const install = new Install({
|
||||||
version: version,
|
version: version,
|
||||||
runDir: tmpDir,
|
runDir: tmpDir,
|
||||||
contextName: 'foo'
|
contextName: 'foo',
|
||||||
|
daemonConfig: `{"debug":true,"features":{"containerd-snapshotter":true}}`
|
||||||
});
|
});
|
||||||
await install.download();
|
await install.download();
|
||||||
await install.install();
|
await install.install();
|
||||||
@@ -40,5 +52,5 @@ describe('install', () => {
|
|||||||
await Docker.printInfo();
|
await Docker.printInfo();
|
||||||
await install.tearDown();
|
await install.tearDown();
|
||||||
})()).resolves.not.toThrow();
|
})()).resolves.not.toThrow();
|
||||||
});
|
}, 600000);
|
||||||
});
|
});
|
||||||
|
|||||||
8
__tests__/fixtures/docker-config-auths.json
Normal file
8
__tests__/fixtures/docker-config-auths.json
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
{
|
||||||
|
"auths": {
|
||||||
|
"https://index.docker.io/v1/": {
|
||||||
|
"auth": "am9lam9lOmhlbGxv",
|
||||||
|
"email": "user@example.com"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
8
__tests__/fixtures/docker-config-proxies.json
Normal file
8
__tests__/fixtures/docker-config-proxies.json
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
{
|
||||||
|
"proxies": {
|
||||||
|
"default": {
|
||||||
|
"httpProxy": "http://127.0.0.1:3128",
|
||||||
|
"httpsProxy": "http://127.0.0.1:3128"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
67
__tests__/fixtures/inspect10.txt
Normal file
67
__tests__/fixtures/inspect10.txt
Normal file
@@ -0,0 +1,67 @@
|
|||||||
|
Name: remote-builder
|
||||||
|
Driver: remote
|
||||||
|
Last Activity: 2023-04-20 12:47:49 +0000 UTC
|
||||||
|
|
||||||
|
Nodes:
|
||||||
|
Name: remote-builder0
|
||||||
|
Endpoint: docker-container://buildx_buildkit_dk-remote-builder0
|
||||||
|
Status: inactive
|
||||||
|
Platforms:
|
||||||
|
|
||||||
|
Name: aws_graviton2
|
||||||
|
Endpoint: tcp://10.0.0.1:1234
|
||||||
|
Driver Options: cacert="/home/user/.certs/aws_graviton2/ca.pem" cert="/home/user/.certs/aws_graviton2/cert.pem" key="/home/user/.certs/aws_graviton2/key.pem"
|
||||||
|
Status: running
|
||||||
|
Buildkit: v0.11.6
|
||||||
|
Platforms: darwin/arm64*, linux/arm64*, linux/arm/v5*, linux/arm/v6*, linux/arm/v7*, windows/arm64*
|
||||||
|
Labels:
|
||||||
|
org.mobyproject.buildkit.worker.executor: oci
|
||||||
|
org.mobyproject.buildkit.worker.hostname: 77ebc22e2d82
|
||||||
|
org.mobyproject.buildkit.worker.network: host
|
||||||
|
org.mobyproject.buildkit.worker.oci.process-mode: sandbox
|
||||||
|
org.mobyproject.buildkit.worker.selinux.enabled: false
|
||||||
|
org.mobyproject.buildkit.worker.snapshotter: overlayfs
|
||||||
|
GC Policy rule#0:
|
||||||
|
All: false
|
||||||
|
Filters: type==source.local,type==exec.cachemount,type==source.git.checkout
|
||||||
|
Keep Duration: 48h0m0s
|
||||||
|
Keep Bytes: 488.3MiB
|
||||||
|
GC Policy rule#1:
|
||||||
|
All: false
|
||||||
|
Keep Duration: 1440h0m0s
|
||||||
|
Keep Bytes: 23.28GiB
|
||||||
|
GC Policy rule#2:
|
||||||
|
All: false
|
||||||
|
Keep Bytes: 23.28GiB
|
||||||
|
GC Policy rule#3:
|
||||||
|
All: true
|
||||||
|
Keep Bytes: 23.28GiB
|
||||||
|
|
||||||
|
Name: linuxone_s390x
|
||||||
|
Endpoint: tcp://10.0.0.2:1234
|
||||||
|
Driver Options: cacert="/home/user/.certs/linuxone_s390x/ca.pem" cert="/home/user/.certs/linuxone_s390x/cert.pem" key="/home/user/.certs/linuxone_s390x/key.pem"
|
||||||
|
Status: running
|
||||||
|
Buildkit: v0.11.6
|
||||||
|
Platforms: linux/s390x*
|
||||||
|
Labels:
|
||||||
|
org.mobyproject.buildkit.worker.executor: oci
|
||||||
|
org.mobyproject.buildkit.worker.hostname: 9d0d62a96818
|
||||||
|
org.mobyproject.buildkit.worker.network: host
|
||||||
|
org.mobyproject.buildkit.worker.oci.process-mode: sandbox
|
||||||
|
org.mobyproject.buildkit.worker.selinux.enabled: false
|
||||||
|
org.mobyproject.buildkit.worker.snapshotter: overlayfs
|
||||||
|
GC Policy rule#0:
|
||||||
|
All: false
|
||||||
|
Filters: type==source.local,type==exec.cachemount,type==source.git.checkout
|
||||||
|
Keep Duration: 48h0m0s
|
||||||
|
Keep Bytes: 488.3MiB
|
||||||
|
GC Policy rule#1:
|
||||||
|
All: false
|
||||||
|
Keep Duration: 1440h0m0s
|
||||||
|
Keep Bytes: 9.313GiB
|
||||||
|
GC Policy rule#2:
|
||||||
|
All: false
|
||||||
|
Keep Bytes: 9.313GiB
|
||||||
|
GC Policy rule#3:
|
||||||
|
All: true
|
||||||
|
Keep Bytes: 9.313GiB
|
||||||
34
__tests__/fixtures/inspect8.txt
Normal file
34
__tests__/fixtures/inspect8.txt
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
Name: builder-52aa0611-faf0-42ac-a940-461e4e287d68
|
||||||
|
Driver: docker-container
|
||||||
|
Last Activity: 2023-06-13 13:52:31 +0000 UTC
|
||||||
|
|
||||||
|
Nodes:
|
||||||
|
Name: builder-52aa0611-faf0-42ac-a940-461e4e287d680
|
||||||
|
Endpoint: unix:///var/run/docker.sock
|
||||||
|
Driver Options: image="moby/buildkit:buildx-stable-1" network="host"
|
||||||
|
Status: running
|
||||||
|
Flags: --debug --allow-insecure-entitlement security.insecure --allow-insecure-entitlement network.host
|
||||||
|
Buildkit: v0.11.6
|
||||||
|
Platforms: linux/amd64, linux/amd64/v2, linux/amd64/v3, linux/amd64/v4, linux/arm64, linux/riscv64, linux/ppc64le, linux/s390x, linux/386, linux/mips64le, linux/mips64, linux/arm/v7, linux/arm/v6
|
||||||
|
Labels:
|
||||||
|
org.mobyproject.buildkit.worker.executor: oci
|
||||||
|
org.mobyproject.buildkit.worker.hostname: fv-az572-38
|
||||||
|
org.mobyproject.buildkit.worker.network: host
|
||||||
|
org.mobyproject.buildkit.worker.oci.process-mode: sandbox
|
||||||
|
org.mobyproject.buildkit.worker.selinux.enabled: false
|
||||||
|
org.mobyproject.buildkit.worker.snapshotter: overlayfs
|
||||||
|
GC Policy rule#0:
|
||||||
|
All: false
|
||||||
|
Filters: type==source.local,type==exec.cachemount,type==source.git.checkout
|
||||||
|
Keep Duration: 48h0m0s
|
||||||
|
Keep Bytes: 488.3MiB
|
||||||
|
GC Policy rule#1:
|
||||||
|
All: false
|
||||||
|
Keep Duration: 1440h0m0s
|
||||||
|
Keep Bytes: 8.382GiB
|
||||||
|
GC Policy rule#2:
|
||||||
|
All: false
|
||||||
|
Keep Bytes: 8.382GiB
|
||||||
|
GC Policy rule#3:
|
||||||
|
All: true
|
||||||
|
Keep Bytes: 8.382GiB
|
||||||
14
__tests__/fixtures/inspect9.txt
Normal file
14
__tests__/fixtures/inspect9.txt
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
Name: default
|
||||||
|
Driver: docker
|
||||||
|
Last Activity: 2023-06-13 18:13:43 +0000 UTC
|
||||||
|
|
||||||
|
Nodes:
|
||||||
|
Name: default
|
||||||
|
Endpoint: default
|
||||||
|
Status: running
|
||||||
|
Buildkit: v0.11.7-0.20230525183624-798ad6b0ce9f
|
||||||
|
Platforms: linux/amd64, linux/amd64/v2, linux/amd64/v3, linux/arm64, linux/riscv64, linux/ppc64le, linux/s390x, linux/386, linux/mips64le, linux/mips64, linux/arm/v7, linux/arm/v6
|
||||||
|
GC Policy rule#0:
|
||||||
|
All: true
|
||||||
|
Filters:
|
||||||
|
Keep Bytes: 100GiB
|
||||||
@@ -34,6 +34,9 @@ describe('context', () => {
|
|||||||
case 'git show --format=%H HEAD --quiet --':
|
case 'git show --format=%H HEAD --quiet --':
|
||||||
result = 'test-sha';
|
result = 'test-sha';
|
||||||
break;
|
break;
|
||||||
|
case 'git branch --show-current':
|
||||||
|
result = 'test';
|
||||||
|
break;
|
||||||
case 'git symbolic-ref HEAD':
|
case 'git symbolic-ref HEAD':
|
||||||
result = 'refs/heads/test';
|
result = 'refs/heads/test';
|
||||||
break;
|
break;
|
||||||
@@ -66,9 +69,12 @@ describe('isInsideWorkTree', () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
describe('remoteSha', () => {
|
describe('remoteSha', () => {
|
||||||
it('returns git remote sha', async () => {
|
it('returns sha using git ls-remote', async () => {
|
||||||
expect(await Git.remoteSha('https://github.com/docker/buildx.git', 'refs/pull/648/head')).toEqual('f11797113e5a9b86bd976329c5dbb8a8bfdfadfa');
|
expect(await Git.remoteSha('https://github.com/docker/buildx.git', 'refs/pull/648/head')).toEqual('f11797113e5a9b86bd976329c5dbb8a8bfdfadfa');
|
||||||
});
|
});
|
||||||
|
it('returns sha using github api', async () => {
|
||||||
|
expect(await Git.remoteSha('https://github.com/docker/buildx.git', 'refs/pull/648/head', process.env.GITHUB_TOKEN)).toEqual('f11797113e5a9b86bd976329c5dbb8a8bfdfadfa');
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('remoteURL', () => {
|
describe('remoteURL', () => {
|
||||||
@@ -87,17 +93,76 @@ describe('remoteURL', () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
describe('ref', () => {
|
describe('ref', () => {
|
||||||
it('have been called', async () => {
|
it('returns mocked ref', async () => {
|
||||||
const execSpy = jest.spyOn(Exec, 'getExecOutput');
|
jest.spyOn(Exec, 'getExecOutput').mockImplementation((cmd, args): Promise<ExecOutput> => {
|
||||||
try {
|
const fullCmd = `${cmd} ${args?.join(' ')}`;
|
||||||
await Git.ref();
|
let result = '';
|
||||||
} catch (err) {
|
switch (fullCmd) {
|
||||||
// noop
|
case 'git branch --show-current':
|
||||||
}
|
result = 'test';
|
||||||
expect(execSpy).toHaveBeenCalledWith(`git`, ['symbolic-ref', 'HEAD'], {
|
break;
|
||||||
silent: true,
|
case 'git symbolic-ref HEAD':
|
||||||
ignoreReturnCode: true
|
result = 'refs/heads/test';
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return Promise.resolve({
|
||||||
|
stdout: result,
|
||||||
|
stderr: '',
|
||||||
|
exitCode: 0
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
const ref = await Git.ref();
|
||||||
|
|
||||||
|
expect(ref).toEqual('refs/heads/test');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('returns mocked detached tag ref', async () => {
|
||||||
|
jest.spyOn(Exec, 'getExecOutput').mockImplementation((cmd, args): Promise<ExecOutput> => {
|
||||||
|
const fullCmd = `${cmd} ${args?.join(' ')}`;
|
||||||
|
let result = '';
|
||||||
|
switch (fullCmd) {
|
||||||
|
case 'git branch --show-current':
|
||||||
|
result = '';
|
||||||
|
break;
|
||||||
|
case 'git show -s --pretty=%D':
|
||||||
|
result = 'HEAD, tag: 8.0.0';
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return Promise.resolve({
|
||||||
|
stdout: result,
|
||||||
|
stderr: '',
|
||||||
|
exitCode: 0
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
const ref = await Git.ref();
|
||||||
|
|
||||||
|
expect(ref).toEqual('refs/tags/8.0.0');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('returns mocked detached branch ref', async () => {
|
||||||
|
jest.spyOn(Exec, 'getExecOutput').mockImplementation((cmd, args): Promise<ExecOutput> => {
|
||||||
|
const fullCmd = `${cmd} ${args?.join(' ')}`;
|
||||||
|
let result = '';
|
||||||
|
switch (fullCmd) {
|
||||||
|
case 'git branch --show-current':
|
||||||
|
result = '';
|
||||||
|
break;
|
||||||
|
case 'git show -s --pretty=%D':
|
||||||
|
result = 'HEAD, origin/test, test';
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return Promise.resolve({
|
||||||
|
stdout: result,
|
||||||
|
stderr: '',
|
||||||
|
exitCode: 0
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
const ref = await Git.ref();
|
||||||
|
|
||||||
|
expect(ref).toEqual('refs/heads/test');
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@@ -111,7 +111,10 @@ describe('actionsRuntimeToken', () => {
|
|||||||
}).toThrow();
|
}).toThrow();
|
||||||
});
|
});
|
||||||
it('fixture', async () => {
|
it('fixture', async () => {
|
||||||
process.env.ACTIONS_RUNTIME_TOKEN = fs.readFileSync(path.join(__dirname, 'fixtures', 'runtimeToken.txt')).toString().trim();
|
process.env.ACTIONS_RUNTIME_TOKEN = fs
|
||||||
|
.readFileSync(path.join(__dirname, 'fixtures', 'runtimeToken.txt'))
|
||||||
|
.toString()
|
||||||
|
.trim();
|
||||||
const runtimeToken = GitHub.actionsRuntimeToken;
|
const runtimeToken = GitHub.actionsRuntimeToken;
|
||||||
expect(runtimeToken?.ac).toEqual('[{"Scope":"refs/heads/master","Permission":3}]');
|
expect(runtimeToken?.ac).toEqual('[{"Scope":"refs/heads/master","Permission":3}]');
|
||||||
expect(runtimeToken?.iss).toEqual('vstoken.actions.githubusercontent.com');
|
expect(runtimeToken?.iss).toEqual('vstoken.actions.githubusercontent.com');
|
||||||
@@ -139,7 +142,10 @@ describe('printActionsRuntimeTokenACs', () => {
|
|||||||
});
|
});
|
||||||
it('refs/heads/master', async () => {
|
it('refs/heads/master', async () => {
|
||||||
const infoSpy = jest.spyOn(core, 'info');
|
const infoSpy = jest.spyOn(core, 'info');
|
||||||
process.env.ACTIONS_RUNTIME_TOKEN = fs.readFileSync(path.join(__dirname, 'fixtures', 'runtimeToken.txt')).toString().trim();
|
process.env.ACTIONS_RUNTIME_TOKEN = fs
|
||||||
|
.readFileSync(path.join(__dirname, 'fixtures', 'runtimeToken.txt'))
|
||||||
|
.toString()
|
||||||
|
.trim();
|
||||||
await GitHub.printActionsRuntimeTokenACs();
|
await GitHub.printActionsRuntimeTokenACs();
|
||||||
expect(infoSpy).toHaveBeenCalledTimes(1);
|
expect(infoSpy).toHaveBeenCalledTimes(1);
|
||||||
expect(infoSpy).toHaveBeenCalledWith(`refs/heads/master: read/write`);
|
expect(infoSpy).toHaveBeenCalledWith(`refs/heads/master: read/write`);
|
||||||
|
|||||||
@@ -73,6 +73,18 @@ describe('getInputList', () => {
|
|||||||
expect(res).toEqual(['user/app:cache', 'type=local,src=path/to/dir']);
|
expect(res).toEqual(['user/app:cache', 'type=local,src=path/to/dir']);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('multiline and ignoring comment correctly', async () => {
|
||||||
|
setInput('labels', 'foo=bar\nbar=qux#baz');
|
||||||
|
const res = Util.getInputList('labels');
|
||||||
|
expect(res).toEqual(['foo=bar', 'bar=qux#baz']);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('multiline with comment', async () => {
|
||||||
|
setInput('labels', 'foo=bar\nbar=qux#baz');
|
||||||
|
const res = Util.getInputList('labels', {comment: '#'});
|
||||||
|
expect(res).toEqual(['foo=bar', 'bar=qux']);
|
||||||
|
});
|
||||||
|
|
||||||
it('different new lines and ignoring comma correctly', async () => {
|
it('different new lines and ignoring comma correctly', async () => {
|
||||||
setInput('cache-from', 'user/app:cache\r\ntype=local,src=path/to/dir');
|
setInput('cache-from', 'user/app:cache\r\ntype=local,src=path/to/dir');
|
||||||
const res = Util.getInputList('cache-from', {ignoreComma: true});
|
const res = Util.getInputList('cache-from', {ignoreComma: true});
|
||||||
@@ -220,6 +232,41 @@ describe('isValidRef', () => {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
describe('trimPrefix', () => {
|
||||||
|
test.each([
|
||||||
|
['', 'abc', ''],
|
||||||
|
['abc', 'a', 'bc'],
|
||||||
|
['abc', 'ab', 'c'],
|
||||||
|
['abc', '', 'abc'],
|
||||||
|
['abc', '', 'abc'],
|
||||||
|
['abc', 'd', 'abc'],
|
||||||
|
['abc', 'abc', ''],
|
||||||
|
['abc', 'abcd', 'abc'],
|
||||||
|
['abcdabc', 'abc', 'dabc'],
|
||||||
|
['abcabc', 'abc', 'abc'],
|
||||||
|
['abcdabc', 'd', 'abcdabc']
|
||||||
|
])('given %p', async (str, prefix, expected) => {
|
||||||
|
expect(Util.trimPrefix(str, prefix)).toEqual(expected);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('trimSuffix', () => {
|
||||||
|
test.each([
|
||||||
|
['', 'abc', ''],
|
||||||
|
['abc', 'c', 'ab'],
|
||||||
|
['abc', '', 'abc'],
|
||||||
|
['abc', 'bc', 'a'],
|
||||||
|
['abc', 'abc', ''],
|
||||||
|
['abc', 'abcd', 'abc'],
|
||||||
|
['abc', 'aabc', 'abc'],
|
||||||
|
['abcdabc', 'abc', 'abcd'],
|
||||||
|
['abcabc', 'abc', 'abc'],
|
||||||
|
['abcdabc', 'd', 'abcdabc']
|
||||||
|
])('given %p', async (str, suffix, expected) => {
|
||||||
|
expect(Util.trimSuffix(str, suffix)).toEqual(expected);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
// See: https://github.com/actions/toolkit/blob/a1b068ec31a042ff1e10a522d8fdf0b8869d53ca/packages/core/src/core.ts#L89
|
// See: https://github.com/actions/toolkit/blob/a1b068ec31a042ff1e10a522d8fdf0b8869d53ca/packages/core/src/core.ts#L89
|
||||||
function getInputName(name: string): string {
|
function getInputName(name: string): string {
|
||||||
return `INPUT_${name.replace(/ /g, '_').toUpperCase()}`;
|
return `INPUT_${name.replace(/ /g, '_').toUpperCase()}`;
|
||||||
|
|||||||
@@ -14,9 +14,9 @@
|
|||||||
# See the License for the specific language governing permissions and
|
# See the License for the specific language governing permissions and
|
||||||
# limitations under the License.
|
# limitations under the License.
|
||||||
|
|
||||||
ARG NODE_VERSION=16
|
ARG NODE_VERSION=20
|
||||||
ARG DOCKER_VERSION=20.10.22
|
ARG DOCKER_VERSION=24.0.5
|
||||||
ARG BUILDX_VERSION=0.10.0
|
ARG BUILDX_VERSION=0.11.2
|
||||||
|
|
||||||
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
|
||||||
|
|||||||
52
package.json
52
package.json
@@ -30,7 +30,7 @@
|
|||||||
],
|
],
|
||||||
"author": "Docker Inc.",
|
"author": "Docker Inc.",
|
||||||
"license": "Apache-2.0",
|
"license": "Apache-2.0",
|
||||||
"packageManager": "yarn@3.3.1",
|
"packageManager": "yarn@3.6.3",
|
||||||
"main": "lib/index.js",
|
"main": "lib/index.js",
|
||||||
"types": "lib/index.d.ts",
|
"types": "lib/index.d.ts",
|
||||||
"directories": {
|
"directories": {
|
||||||
@@ -45,38 +45,42 @@
|
|||||||
"registry": "https://registry.npmjs.org/"
|
"registry": "https://registry.npmjs.org/"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@actions/core": "^1.10.0",
|
"@actions/cache": "^3.2.2",
|
||||||
|
"@actions/core": "^1.10.1",
|
||||||
"@actions/exec": "^1.1.1",
|
"@actions/exec": "^1.1.1",
|
||||||
"@actions/github": "^5.1.1",
|
"@actions/github": "^6.0.0",
|
||||||
"@actions/http-client": "^2.0.1",
|
"@actions/http-client": "^2.2.0",
|
||||||
"@actions/io": "^1.1.2",
|
"@actions/io": "^1.1.3",
|
||||||
"@actions/tool-cache": "^2.0.1",
|
"@actions/tool-cache": "^2.0.1",
|
||||||
|
"@octokit/core": "^5.0.1",
|
||||||
|
"@octokit/plugin-rest-endpoint-methods": "^10.0.1",
|
||||||
"async-retry": "^1.3.3",
|
"async-retry": "^1.3.3",
|
||||||
"csv-parse": "^5.3.8",
|
"csv-parse": "^5.5.2",
|
||||||
"handlebars": "^4.7.7",
|
"handlebars": "^4.7.8",
|
||||||
|
"js-yaml": "^4.1.0",
|
||||||
"jwt-decode": "^3.1.2",
|
"jwt-decode": "^3.1.2",
|
||||||
"semver": "^7.5.0",
|
"semver": "^7.5.4",
|
||||||
"tmp": "^0.2.1"
|
"tmp": "^0.2.1"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@types/csv-parse": "^1.2.2",
|
"@types/csv-parse": "^1.2.2",
|
||||||
"@types/node": "^16.18.21",
|
"@types/js-yaml": "^4.0.5",
|
||||||
"@types/semver": "^7.3.13",
|
"@types/node": "^20.5.9",
|
||||||
|
"@types/semver": "^7.5.1",
|
||||||
"@types/tmp": "^0.2.3",
|
"@types/tmp": "^0.2.3",
|
||||||
"@typescript-eslint/eslint-plugin": "^5.56.0",
|
"@typescript-eslint/eslint-plugin": "^6.6.0",
|
||||||
"@typescript-eslint/parser": "^5.56.0",
|
"@typescript-eslint/parser": "^6.6.0",
|
||||||
"cpy-cli": "^4.2.0",
|
"dotenv": "^16.3.1",
|
||||||
"dotenv": "^16.0.3",
|
"eslint": "^8.48.0",
|
||||||
"eslint": "^8.36.0",
|
"eslint-config-prettier": "^9.0.0",
|
||||||
"eslint-config-prettier": "^8.8.0",
|
"eslint-plugin-import": "^2.28.1",
|
||||||
"eslint-plugin-import": "^2.27.5",
|
"eslint-plugin-jest": "^27.2.3",
|
||||||
"eslint-plugin-jest": "^27.2.1",
|
"eslint-plugin-prettier": "^5.0.0",
|
||||||
"eslint-plugin-prettier": "^4.2.1",
|
"jest": "^29.6.4",
|
||||||
"jest": "^29.5.0",
|
"prettier": "^3.0.3",
|
||||||
"prettier": "^2.8.7",
|
"rimraf": "^5.0.1",
|
||||||
"rimraf": "^4.4.1",
|
"ts-jest": "^29.1.1",
|
||||||
"ts-jest": "^29.0.5",
|
|
||||||
"ts-node": "^10.9.1",
|
"ts-node": "^10.9.1",
|
||||||
"typescript": "^4.9.5"
|
"typescript": "^5.2.2"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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, NodeInfo} from '../types/builder';
|
import {BuilderInfo, GCPolicy, NodeInfo} from '../types/builder';
|
||||||
|
|
||||||
export interface BuilderOpts {
|
export interface BuilderOpts {
|
||||||
buildx?: Buildx;
|
buildx?: Buildx;
|
||||||
@@ -72,55 +72,73 @@ export class Builder {
|
|||||||
const builder: BuilderInfo = {
|
const builder: BuilderInfo = {
|
||||||
nodes: []
|
nodes: []
|
||||||
};
|
};
|
||||||
let node: NodeInfo = {};
|
let parsingType: string | undefined;
|
||||||
|
let currentNode: NodeInfo = {};
|
||||||
|
let currentGCPolicy: GCPolicy | undefined;
|
||||||
for (const line of data.trim().split(`\n`)) {
|
for (const line of data.trim().split(`\n`)) {
|
||||||
const [key, ...rest] = line.split(':');
|
const [key, ...rest] = line.split(':');
|
||||||
|
const lkey = key.toLowerCase();
|
||||||
const value = rest.map(v => v.trim()).join(':');
|
const value = rest.map(v => v.trim()).join(':');
|
||||||
if (key.length == 0 || value.length == 0) {
|
if (key.length == 0) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
switch (key.toLowerCase()) {
|
switch (true) {
|
||||||
case 'name': {
|
case lkey == 'name': {
|
||||||
|
parsingType = undefined;
|
||||||
if (builder.name == undefined) {
|
if (builder.name == undefined) {
|
||||||
builder.name = value;
|
builder.name = value;
|
||||||
} else {
|
} else {
|
||||||
if (Object.keys(node).length > 0) {
|
if (currentGCPolicy && currentNode.gcPolicy) {
|
||||||
builder.nodes.push(node);
|
currentNode.gcPolicy.push(currentGCPolicy);
|
||||||
node = {};
|
currentGCPolicy = undefined;
|
||||||
}
|
}
|
||||||
node.name = value;
|
if (currentNode.name) {
|
||||||
|
builder.nodes.push(currentNode);
|
||||||
|
}
|
||||||
|
currentNode = {name: value};
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case 'driver': {
|
case lkey == 'driver': {
|
||||||
|
parsingType = undefined;
|
||||||
builder.driver = value;
|
builder.driver = value;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case 'last activity': {
|
case lkey == 'last activity': {
|
||||||
|
parsingType = undefined;
|
||||||
builder.lastActivity = new Date(value);
|
builder.lastActivity = new Date(value);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case 'endpoint': {
|
case lkey == 'endpoint': {
|
||||||
node.endpoint = value;
|
parsingType = undefined;
|
||||||
|
currentNode.endpoint = value;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case 'driver options': {
|
case lkey == 'driver options': {
|
||||||
node['driver-opts'] = (value.match(/([a-zA-Z0-9_.]+)="([^"]*)"/g) || []).map(v => v.replace(/^(.*)="(.*)"$/g, '$1=$2'));
|
parsingType = undefined;
|
||||||
|
currentNode['driver-opts'] = (value.match(/([a-zA-Z0-9_.]+)="([^"]*)"/g) || []).map(v => v.replace(/^(.*)="(.*)"$/g, '$1=$2'));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case 'status': {
|
case lkey == 'status': {
|
||||||
node.status = value;
|
parsingType = undefined;
|
||||||
|
currentNode.status = value;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case 'flags': {
|
case lkey == 'flags': {
|
||||||
node['buildkitd-flags'] = value;
|
parsingType = undefined;
|
||||||
|
currentNode['buildkitd-flags'] = value;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case 'buildkit': {
|
case lkey == 'buildkit': {
|
||||||
node.buildkit = value;
|
parsingType = undefined;
|
||||||
|
currentNode.buildkit = value;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case 'platforms': {
|
case lkey == 'platforms': {
|
||||||
|
parsingType = undefined;
|
||||||
|
if (!value) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
let platforms: Array<string> = [];
|
let platforms: Array<string> = [];
|
||||||
// if a preferred platform is being set then use only these
|
// if a preferred platform is being set then use only these
|
||||||
// https://docs.docker.com/engine/reference/commandline/buildx_inspect/#get-information-about-a-builder-instance
|
// https://docs.docker.com/engine/reference/commandline/buildx_inspect/#get-information-about-a-builder-instance
|
||||||
@@ -134,13 +152,63 @@ export class Builder {
|
|||||||
// otherwise set all platforms available
|
// otherwise set all platforms available
|
||||||
platforms = value.split(', ');
|
platforms = value.split(', ');
|
||||||
}
|
}
|
||||||
node.platforms = platforms.join(',');
|
currentNode.platforms = platforms.join(',');
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
case lkey == 'labels': {
|
||||||
|
parsingType = 'label';
|
||||||
|
currentNode.labels = {};
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case lkey.startsWith('gc policy rule#'): {
|
||||||
|
parsingType = 'gcpolicy';
|
||||||
|
if (currentNode.gcPolicy && currentGCPolicy) {
|
||||||
|
currentNode.gcPolicy.push(currentGCPolicy);
|
||||||
|
currentGCPolicy = undefined;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
default: {
|
||||||
|
switch (parsingType || '') {
|
||||||
|
case 'label': {
|
||||||
|
currentNode.labels = currentNode.labels || {};
|
||||||
|
currentNode.labels[key.trim()] = value;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 'gcpolicy': {
|
||||||
|
currentNode.gcPolicy = currentNode.gcPolicy || [];
|
||||||
|
currentGCPolicy = currentGCPolicy || {};
|
||||||
|
switch (lkey.trim()) {
|
||||||
|
case 'all': {
|
||||||
|
currentGCPolicy.all = value == 'true';
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 'filters': {
|
||||||
|
if (value) {
|
||||||
|
currentGCPolicy.filter = value.split(',');
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 'keep duration': {
|
||||||
|
currentGCPolicy.keepDuration = value;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 'keep bytes': {
|
||||||
|
currentGCPolicy.keepBytes = value;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (Object.keys(node).length > 0) {
|
if (currentGCPolicy && currentNode.gcPolicy) {
|
||||||
builder.nodes.push(node);
|
currentNode.gcPolicy.push(currentGCPolicy);
|
||||||
|
}
|
||||||
|
if (currentNode.name) {
|
||||||
|
builder.nodes.push(currentNode);
|
||||||
}
|
}
|
||||||
return builder;
|
return builder;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -21,6 +21,18 @@ import {parse} from 'csv-parse/sync';
|
|||||||
|
|
||||||
import {Context} from '../context';
|
import {Context} from '../context';
|
||||||
|
|
||||||
|
const parseKvp = (kvp: string): [string, string] => {
|
||||||
|
const delimiterIndex = kvp.indexOf('=');
|
||||||
|
const key = kvp.substring(0, delimiterIndex);
|
||||||
|
const value = kvp.substring(delimiterIndex + 1);
|
||||||
|
|
||||||
|
if (key.length == 0 || value.length == 0) {
|
||||||
|
throw new Error(`${kvp} is not a valid secret`);
|
||||||
|
}
|
||||||
|
|
||||||
|
return [key, value];
|
||||||
|
};
|
||||||
|
|
||||||
export class Inputs {
|
export class Inputs {
|
||||||
public static getBuildImageIDFilePath(): string {
|
public static getBuildImageIDFilePath(): string {
|
||||||
return path.join(Context.tmpDir(), 'iidfile');
|
return path.join(Context.tmpDir(), 'iidfile');
|
||||||
@@ -70,13 +82,17 @@ export class Inputs {
|
|||||||
return Inputs.resolveBuildSecret(kvp, true);
|
return Inputs.resolveBuildSecret(kvp, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static resolveBuildSecretEnv(kvp: string): string {
|
||||||
|
const [key, value] = parseKvp(kvp);
|
||||||
|
|
||||||
|
return `id=${key},env=${value}`;
|
||||||
|
}
|
||||||
|
|
||||||
public static resolveBuildSecret(kvp: string, file: boolean): string {
|
public static resolveBuildSecret(kvp: string, file: boolean): string {
|
||||||
const delimiterIndex = kvp.indexOf('=');
|
const [key, _value] = parseKvp(kvp);
|
||||||
const key = kvp.substring(0, delimiterIndex);
|
|
||||||
let value = kvp.substring(delimiterIndex + 1);
|
let value = _value;
|
||||||
if (key.length == 0 || value.length == 0) {
|
|
||||||
throw new Error(`${kvp} is not a valid secret`);
|
|
||||||
}
|
|
||||||
if (file) {
|
if (file) {
|
||||||
if (!fs.existsSync(value)) {
|
if (!fs.existsSync(value)) {
|
||||||
throw new Error(`secret file ${value} not found`);
|
throw new Error(`secret file ${value} not found`);
|
||||||
|
|||||||
@@ -14,12 +14,14 @@
|
|||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
import crypto from 'crypto';
|
||||||
import fs from 'fs';
|
import fs from 'fs';
|
||||||
import os from 'os';
|
import os from 'os';
|
||||||
import path from 'path';
|
import path from 'path';
|
||||||
import * as core from '@actions/core';
|
import * as core from '@actions/core';
|
||||||
import * as httpm from '@actions/http-client';
|
import * as httpm from '@actions/http-client';
|
||||||
import * as tc from '@actions/tool-cache';
|
import * as tc from '@actions/tool-cache';
|
||||||
|
import * as cache from '@actions/cache';
|
||||||
import * as semver from 'semver';
|
import * as semver from 'semver';
|
||||||
import * as util from 'util';
|
import * as util from 'util';
|
||||||
|
|
||||||
@@ -28,7 +30,9 @@ import {Context} from '../context';
|
|||||||
import {Exec} from '../exec';
|
import {Exec} from '../exec';
|
||||||
import {Docker} from '../docker/docker';
|
import {Docker} from '../docker/docker';
|
||||||
import {Git} from '../git';
|
import {Git} from '../git';
|
||||||
|
import {Util} from '../util';
|
||||||
|
|
||||||
|
import {DownloadVersion} from '../types/buildx';
|
||||||
import {GitHubRelease} from '../types/github';
|
import {GitHubRelease} from '../types/github';
|
||||||
|
|
||||||
export interface InstallOpts {
|
export interface InstallOpts {
|
||||||
@@ -42,70 +46,90 @@ export class Install {
|
|||||||
this._standalone = opts?.standalone;
|
this._standalone = opts?.standalone;
|
||||||
}
|
}
|
||||||
|
|
||||||
public async download(version: string): Promise<string> {
|
/*
|
||||||
|
* Download buildx binary from GitHub release
|
||||||
|
* @param version semver version or latest
|
||||||
|
* @returns path to the buildx binary
|
||||||
|
*/
|
||||||
|
public async download(v: string): Promise<string> {
|
||||||
|
const version: DownloadVersion = await Install.getDownloadVersion(v);
|
||||||
|
core.debug(`Install.download version: ${version.version}`);
|
||||||
|
|
||||||
const release: GitHubRelease = await Install.getRelease(version);
|
const release: GitHubRelease = await Install.getRelease(version);
|
||||||
const fversion = release.tag_name.replace(/^v+|v+$/g, '');
|
core.debug(`Install.download release tag name: ${release.tag_name}`);
|
||||||
core.debug(`Install.download version: ${fversion}`);
|
|
||||||
|
|
||||||
let toolPath: string;
|
const vspec = await this.vspec(release.tag_name);
|
||||||
toolPath = tc.find('buildx', fversion, this.platform());
|
core.debug(`Install.download vspec: ${vspec}`);
|
||||||
if (!toolPath) {
|
|
||||||
const c = semver.clean(fversion) || '';
|
const c = semver.clean(vspec) || '';
|
||||||
if (!semver.valid(c)) {
|
if (!semver.valid(c)) {
|
||||||
throw new Error(`Invalid Buildx version "${fversion}".`);
|
throw new Error(`Invalid Buildx version "${vspec}".`);
|
||||||
}
|
|
||||||
toolPath = await this.fetchBinary(fversion);
|
|
||||||
}
|
}
|
||||||
core.debug(`Install.download toolPath: ${toolPath}`);
|
|
||||||
|
|
||||||
return toolPath;
|
const installCache = new InstallCache(version.key != 'official' ? `buildx-dl-bin-${version.key}` : 'buildx-dl-bin', vspec);
|
||||||
|
|
||||||
|
const cacheFoundPath = await installCache.find();
|
||||||
|
if (cacheFoundPath) {
|
||||||
|
core.info(`Buildx binary found in ${cacheFoundPath}`);
|
||||||
|
return cacheFoundPath;
|
||||||
|
}
|
||||||
|
|
||||||
|
const downloadURL = util.format(version.downloadURL, vspec, this.filename(vspec));
|
||||||
|
core.info(`Downloading ${downloadURL}`);
|
||||||
|
|
||||||
|
const htcDownloadPath = await tc.downloadTool(downloadURL);
|
||||||
|
core.debug(`Install.download htcDownloadPath: ${htcDownloadPath}`);
|
||||||
|
|
||||||
|
const cacheSavePath = await installCache.save(htcDownloadPath);
|
||||||
|
core.info(`Cached to ${cacheSavePath}`);
|
||||||
|
return cacheSavePath;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Build buildx binary from source
|
||||||
|
* @param gitContext git repo context
|
||||||
|
* @returns path to the buildx binary
|
||||||
|
*/
|
||||||
public async build(gitContext: string): Promise<string> {
|
public async build(gitContext: string): Promise<string> {
|
||||||
// eslint-disable-next-line prefer-const
|
const vspec = await this.vspec(gitContext);
|
||||||
let [repo, ref] = gitContext.split('#');
|
core.debug(`Install.build vspec: ${vspec}`);
|
||||||
if (ref.length == 0) {
|
|
||||||
ref = 'master';
|
const installCache = new InstallCache('buildx-build-bin', vspec);
|
||||||
|
|
||||||
|
const cacheFoundPath = await installCache.find();
|
||||||
|
if (cacheFoundPath) {
|
||||||
|
core.info(`Buildx binary found in ${cacheFoundPath}`);
|
||||||
|
return cacheFoundPath;
|
||||||
}
|
}
|
||||||
|
|
||||||
let vspec: string;
|
const outputDir = path.join(Context.tmpDir(), 'buildx-build-cache');
|
||||||
// TODO: include full ref as fingerprint. Use commit sha as best-effort in the meantime.
|
const buildCmd = await this.buildCommand(gitContext, outputDir);
|
||||||
if (ref.match(/^[0-9a-fA-F]{40}$/)) {
|
|
||||||
vspec = ref;
|
|
||||||
} else {
|
|
||||||
vspec = await Git.remoteSha(repo, ref);
|
|
||||||
}
|
|
||||||
core.debug(`Install.build: tool version spec ${vspec}`);
|
|
||||||
|
|
||||||
let toolPath: string;
|
const buildBinPath = await Exec.getExecOutput(buildCmd.command, buildCmd.args, {
|
||||||
toolPath = tc.find('buildx', vspec);
|
ignoreReturnCode: true
|
||||||
if (!toolPath) {
|
}).then(res => {
|
||||||
const outputDir = path.join(Context.tmpDir(), 'build-cache');
|
if (res.stderr.length > 0 && res.exitCode != 0) {
|
||||||
const buildCmd = await this.buildCommand(gitContext, outputDir);
|
throw new Error(`build failed with: ${res.stderr.match(/(.*)\s*$/)?.[0]?.trim() ?? 'unknown error'}`);
|
||||||
toolPath = await Exec.getExecOutput(buildCmd.command, buildCmd.args, {
|
}
|
||||||
ignoreReturnCode: true
|
return `${outputDir}/buildx`;
|
||||||
}).then(res => {
|
});
|
||||||
if (res.stderr.length > 0 && res.exitCode != 0) {
|
|
||||||
core.warning(res.stderr.trim());
|
|
||||||
}
|
|
||||||
return tc.cacheFile(`${outputDir}/buildx`, os.platform() == 'win32' ? 'docker-buildx.exe' : 'docker-buildx', 'buildx', vspec, this.platform());
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
return toolPath;
|
const cacheSavePath = await installCache.save(buildBinPath);
|
||||||
|
core.info(`Cached to ${cacheSavePath}`);
|
||||||
|
return cacheSavePath;
|
||||||
}
|
}
|
||||||
|
|
||||||
public async installStandalone(toolPath: string, dest?: string): Promise<string> {
|
public async installStandalone(binPath: string, dest?: string): Promise<string> {
|
||||||
core.info('Standalone mode');
|
core.info('Standalone mode');
|
||||||
dest = dest || Context.tmpDir();
|
dest = dest || Context.tmpDir();
|
||||||
const toolBinPath = path.join(toolPath, os.platform() == 'win32' ? 'docker-buildx.exe' : 'docker-buildx');
|
|
||||||
const binDir = path.join(dest, 'bin');
|
const binDir = path.join(dest, 'buildx-bin-standalone');
|
||||||
if (!fs.existsSync(binDir)) {
|
if (!fs.existsSync(binDir)) {
|
||||||
fs.mkdirSync(binDir, {recursive: true});
|
fs.mkdirSync(binDir, {recursive: true});
|
||||||
}
|
}
|
||||||
const filename: string = os.platform() == 'win32' ? 'buildx.exe' : 'buildx';
|
const binName: string = os.platform() == 'win32' ? 'buildx.exe' : 'buildx';
|
||||||
const buildxPath: string = path.join(binDir, filename);
|
const buildxPath: string = path.join(binDir, binName);
|
||||||
fs.copyFileSync(toolBinPath, buildxPath);
|
fs.copyFileSync(binPath, buildxPath);
|
||||||
|
|
||||||
core.info('Fixing perms');
|
core.info('Fixing perms');
|
||||||
fs.chmodSync(buildxPath, '0755');
|
fs.chmodSync(buildxPath, '0755');
|
||||||
@@ -117,17 +141,17 @@ export class Install {
|
|||||||
return buildxPath;
|
return buildxPath;
|
||||||
}
|
}
|
||||||
|
|
||||||
public async installPlugin(toolPath: string, dest?: string): Promise<string> {
|
public async installPlugin(binPath: string, dest?: string): Promise<string> {
|
||||||
core.info('Docker plugin mode');
|
core.info('Docker plugin mode');
|
||||||
dest = dest || Docker.configDir;
|
dest = dest || Docker.configDir;
|
||||||
const toolBinPath = path.join(toolPath, os.platform() == 'win32' ? 'docker-buildx.exe' : 'docker-buildx');
|
|
||||||
const pluginsDir: string = path.join(dest, 'cli-plugins');
|
const pluginsDir: string = path.join(dest, 'cli-plugins');
|
||||||
if (!fs.existsSync(pluginsDir)) {
|
if (!fs.existsSync(pluginsDir)) {
|
||||||
fs.mkdirSync(pluginsDir, {recursive: true});
|
fs.mkdirSync(pluginsDir, {recursive: true});
|
||||||
}
|
}
|
||||||
const filename: string = os.platform() == 'win32' ? 'docker-buildx.exe' : 'docker-buildx';
|
const binName: string = os.platform() == 'win32' ? 'docker-buildx.exe' : 'docker-buildx';
|
||||||
const pluginPath: string = path.join(pluginsDir, filename);
|
const pluginPath: string = path.join(pluginsDir, binName);
|
||||||
fs.copyFileSync(toolBinPath, pluginPath);
|
fs.copyFileSync(binPath, pluginPath);
|
||||||
|
|
||||||
core.info('Fixing perms');
|
core.info('Fixing perms');
|
||||||
fs.chmodSync(pluginPath, '0755');
|
fs.chmodSync(pluginPath, '0755');
|
||||||
@@ -157,14 +181,14 @@ export class Install {
|
|||||||
throw new Error(`Neither buildx standalone or plugin have been found to build from ref ${gitContext}`);
|
throw new Error(`Neither buildx standalone or plugin have been found to build from ref ${gitContext}`);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const args = ['build', '--target', 'binaries', '--platform', 'local', '--build-arg', 'BUILDKIT_CONTEXT_KEEP_GIT_DIR=1', '--output', `type=local,dest=${outputDir}`];
|
||||||
|
if (process.env.GIT_AUTH_TOKEN) {
|
||||||
|
args.push('--secret', 'id=GIT_AUTH_TOKEN');
|
||||||
|
}
|
||||||
|
args.push(gitContext);
|
||||||
|
|
||||||
//prettier-ignore
|
//prettier-ignore
|
||||||
return await new Buildx({standalone: buildStandalone}).getCommand([
|
return await new Buildx({standalone: buildStandalone}).getCommand(args);
|
||||||
'build',
|
|
||||||
'--target', 'binaries',
|
|
||||||
'--build-arg', 'BUILDKIT_CONTEXT_KEEP_GIT_DIR=1',
|
|
||||||
'--output', `type=local,dest=${outputDir}`,
|
|
||||||
gitContext
|
|
||||||
]);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private async isStandalone(): Promise<boolean> {
|
private async isStandalone(): Promise<boolean> {
|
||||||
@@ -173,21 +197,6 @@ export class Install {
|
|||||||
return standalone;
|
return standalone;
|
||||||
}
|
}
|
||||||
|
|
||||||
private async fetchBinary(version: string): Promise<string> {
|
|
||||||
const targetFile: string = os.platform() == 'win32' ? 'docker-buildx.exe' : 'docker-buildx';
|
|
||||||
const downloadURL = util.format('https://github.com/docker/buildx/releases/download/v%s/%s', version, this.filename(version));
|
|
||||||
core.info(`Downloading ${downloadURL}`);
|
|
||||||
const downloadPath = await tc.downloadTool(downloadURL);
|
|
||||||
core.debug(`Install.fetchBinary downloadPath: ${downloadPath}`);
|
|
||||||
return await tc.cacheFile(downloadPath, targetFile, 'buildx', version, this.platform());
|
|
||||||
}
|
|
||||||
|
|
||||||
private platform(): string {
|
|
||||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
||||||
const arm_version = (process.config.variables as any).arm_version;
|
|
||||||
return `${os.platform()}-${os.arch()}${arm_version ? 'v' + arm_version : ''}`;
|
|
||||||
}
|
|
||||||
|
|
||||||
private filename(version: string): string {
|
private filename(version: string): string {
|
||||||
let arch: string;
|
let arch: string;
|
||||||
switch (os.arch()) {
|
switch (os.arch()) {
|
||||||
@@ -215,19 +224,151 @@ export class Install {
|
|||||||
return util.format('buildx-v%s.%s-%s%s', version, platform, arch, ext);
|
return util.format('buildx-v%s.%s-%s%s', version, platform, arch, ext);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static async getRelease(version: string): Promise<GitHubRelease> {
|
/*
|
||||||
const url = `https://raw.githubusercontent.com/docker/actions-toolkit/main/.github/buildx-releases.json`;
|
* Get version spec (fingerprint) for cache key. If versionOrRef is a valid
|
||||||
|
* Git context, then return the SHA of the ref along the repo and owner and
|
||||||
|
* create a hash of it. Otherwise, return the versionOrRef (semver) as is
|
||||||
|
* without the 'v' prefix.
|
||||||
|
*/
|
||||||
|
private async vspec(versionOrRef: string): Promise<string> {
|
||||||
|
if (!Util.isValidRef(versionOrRef)) {
|
||||||
|
const v = versionOrRef.replace(/^v+|v+$/g, '');
|
||||||
|
core.info(`Use ${v} version spec cache key for ${versionOrRef}`);
|
||||||
|
return v;
|
||||||
|
}
|
||||||
|
|
||||||
|
// eslint-disable-next-line prefer-const
|
||||||
|
let [baseURL, ref] = versionOrRef.split('#');
|
||||||
|
if (ref.length == 0) {
|
||||||
|
ref = 'master';
|
||||||
|
}
|
||||||
|
|
||||||
|
let sha: string;
|
||||||
|
if (ref.match(/^[0-9a-fA-F]{40}$/)) {
|
||||||
|
sha = ref;
|
||||||
|
} else {
|
||||||
|
sha = await Git.remoteSha(baseURL, ref, process.env.GIT_AUTH_TOKEN);
|
||||||
|
}
|
||||||
|
|
||||||
|
const [owner, repo] = baseURL.substring('https://github.com/'.length).split('/');
|
||||||
|
const key = `${owner}/${Util.trimSuffix(repo, '.git')}/${sha}`;
|
||||||
|
const hash = crypto.createHash('sha256').update(key).digest('hex');
|
||||||
|
core.info(`Use ${hash} version spec cache key for ${key}`);
|
||||||
|
return hash;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static async getDownloadVersion(v: string): Promise<DownloadVersion> {
|
||||||
|
let [repoKey, version] = v.split(':');
|
||||||
|
if (!version) {
|
||||||
|
version = repoKey;
|
||||||
|
repoKey = 'official';
|
||||||
|
}
|
||||||
|
switch (repoKey) {
|
||||||
|
case 'official': {
|
||||||
|
return {
|
||||||
|
key: repoKey,
|
||||||
|
version: version,
|
||||||
|
downloadURL: 'https://github.com/docker/buildx/releases/download/v%s/%s',
|
||||||
|
releasesURL: 'https://raw.githubusercontent.com/docker/actions-toolkit/main/.github/buildx-releases.json'
|
||||||
|
};
|
||||||
|
}
|
||||||
|
case 'lab': {
|
||||||
|
return {
|
||||||
|
key: repoKey,
|
||||||
|
version: version,
|
||||||
|
downloadURL: 'https://github.com/docker/buildx-desktop/releases/download/v%s/%s',
|
||||||
|
releasesURL: 'https://raw.githubusercontent.com/docker/actions-toolkit/main/.github/buildx-lab-releases.json'
|
||||||
|
};
|
||||||
|
}
|
||||||
|
default: {
|
||||||
|
throw new Error(`Cannot find buildx version for ${v}`);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static async getRelease(version: DownloadVersion): Promise<GitHubRelease> {
|
||||||
const http: httpm.HttpClient = new httpm.HttpClient('docker-actions-toolkit');
|
const http: httpm.HttpClient = new httpm.HttpClient('docker-actions-toolkit');
|
||||||
const resp: httpm.HttpClientResponse = await http.get(url);
|
const resp: httpm.HttpClientResponse = await http.get(version.releasesURL);
|
||||||
const body = await resp.readBody();
|
const body = await resp.readBody();
|
||||||
const statusCode = resp.message.statusCode || 500;
|
const statusCode = resp.message.statusCode || 500;
|
||||||
if (statusCode >= 400) {
|
if (statusCode >= 400) {
|
||||||
throw new Error(`Failed to get Buildx release ${version} from ${url} with status code ${statusCode}: ${body}`);
|
throw new Error(`Failed to get Buildx releases from ${version.releasesURL} with status code ${statusCode}: ${body}`);
|
||||||
}
|
}
|
||||||
const releases = <Record<string, GitHubRelease>>JSON.parse(body);
|
const releases = <Record<string, GitHubRelease>>JSON.parse(body);
|
||||||
if (!releases[version]) {
|
if (!releases[version.version]) {
|
||||||
throw new Error(`Cannot find Buildx release ${version} in ${url}`);
|
throw new Error(`Cannot find Buildx release ${version.version} in ${version.releasesURL}`);
|
||||||
}
|
}
|
||||||
return releases[version];
|
return releases[version.version];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class InstallCache {
|
||||||
|
private readonly htcName: string;
|
||||||
|
private readonly htcVersion: string;
|
||||||
|
private readonly ghaCacheKey: string;
|
||||||
|
private readonly cacheDir: string;
|
||||||
|
private readonly cacheFile: string;
|
||||||
|
private readonly cachePath: string;
|
||||||
|
|
||||||
|
constructor(htcName: string, htcVersion: string) {
|
||||||
|
this.htcName = htcName;
|
||||||
|
this.htcVersion = htcVersion;
|
||||||
|
this.ghaCacheKey = util.format('%s-%s-%s', this.htcName, this.htcVersion, this.platform());
|
||||||
|
this.cacheDir = path.join(Buildx.configDir, '.bin', htcVersion, this.platform());
|
||||||
|
this.cacheFile = os.platform() == 'win32' ? 'docker-buildx.exe' : 'docker-buildx';
|
||||||
|
this.cachePath = path.join(this.cacheDir, this.cacheFile);
|
||||||
|
if (!fs.existsSync(this.cacheDir)) {
|
||||||
|
fs.mkdirSync(this.cacheDir, {recursive: true});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public async save(file: string): Promise<string> {
|
||||||
|
core.debug(`InstallCache.save ${file}`);
|
||||||
|
const cachePath = this.copyToCache(file);
|
||||||
|
|
||||||
|
const htcPath = await tc.cacheDir(this.cacheDir, this.htcName, this.htcVersion, this.platform());
|
||||||
|
core.debug(`InstallCache.save cached to hosted tool cache ${htcPath}`);
|
||||||
|
|
||||||
|
if (cache.isFeatureAvailable()) {
|
||||||
|
core.debug(`InstallCache.save caching ${this.ghaCacheKey} to GitHub Actions cache`);
|
||||||
|
await cache.saveCache([this.cacheDir], this.ghaCacheKey);
|
||||||
|
}
|
||||||
|
|
||||||
|
return cachePath;
|
||||||
|
}
|
||||||
|
|
||||||
|
public async find(): Promise<string> {
|
||||||
|
let htcPath = tc.find(this.htcName, this.htcVersion, this.platform());
|
||||||
|
if (htcPath) {
|
||||||
|
core.info(`Restored from hosted tool cache ${htcPath}`);
|
||||||
|
return this.copyToCache(`${htcPath}/${this.cacheFile}`);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (cache.isFeatureAvailable()) {
|
||||||
|
core.debug(`GitHub Actions cache feature available`);
|
||||||
|
if (await cache.restoreCache([this.cacheDir], this.ghaCacheKey)) {
|
||||||
|
core.info(`Restored ${this.ghaCacheKey} from GitHub Actions cache`);
|
||||||
|
htcPath = await tc.cacheDir(this.cacheDir, this.htcName, this.htcVersion, this.platform());
|
||||||
|
core.info(`Restored to hosted tool cache ${htcPath}`);
|
||||||
|
return this.copyToCache(`${htcPath}/${this.cacheFile}`);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
core.info(`GitHub Actions cache feature not available`);
|
||||||
|
}
|
||||||
|
|
||||||
|
return '';
|
||||||
|
}
|
||||||
|
|
||||||
|
private copyToCache(file: string): string {
|
||||||
|
core.debug(`Copying ${file} to ${this.cachePath}`);
|
||||||
|
fs.copyFileSync(file, this.cachePath);
|
||||||
|
fs.chmodSync(this.cachePath, '0755');
|
||||||
|
return this.cachePath;
|
||||||
|
}
|
||||||
|
|
||||||
|
private platform(): string {
|
||||||
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||||
|
const arm_version = (process.config.variables as any).arm_version;
|
||||||
|
return `${os.platform()}-${os.arch()}${arm_version ? 'v' + arm_version : ''}`;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -17,10 +17,6 @@
|
|||||||
import fs from 'fs';
|
import fs from 'fs';
|
||||||
import {Context} from '../context';
|
import {Context} from '../context';
|
||||||
|
|
||||||
export const setupDockerLinuxSh = (): string => {
|
|
||||||
return get('docker-setup-linux.sh', setupDockerLinuxShData, '0755');
|
|
||||||
};
|
|
||||||
|
|
||||||
export const setupDockerWinPs1 = (): string => {
|
export const setupDockerWinPs1 = (): string => {
|
||||||
return get('docker-setup-win.ps1', setupDockerWinPs1Data);
|
return get('docker-setup-win.ps1', setupDockerWinPs1Data);
|
||||||
};
|
};
|
||||||
@@ -45,42 +41,6 @@ const get = (filename: string, data: string, mode?: string): string => {
|
|||||||
return assetPath;
|
return assetPath;
|
||||||
};
|
};
|
||||||
|
|
||||||
export const setupDockerLinuxShData = `
|
|
||||||
#!/usr/bin/env bash
|
|
||||||
|
|
||||||
set -eu
|
|
||||||
|
|
||||||
: "\${TOOLDIR=}"
|
|
||||||
: "\${RUNDIR=}"
|
|
||||||
: "\${DOCKER_HOST=}"
|
|
||||||
|
|
||||||
export PATH="$TOOLDIR::$PATH"
|
|
||||||
|
|
||||||
if [ -z "$DOCKER_HOST" ]; then
|
|
||||||
echo >&2 'error: DOCKER_HOST required'
|
|
||||||
false
|
|
||||||
fi
|
|
||||||
|
|
||||||
if ! command -v dockerd &> /dev/null; then
|
|
||||||
echo >&2 'error: dockerd missing from PATH'
|
|
||||||
false
|
|
||||||
fi
|
|
||||||
|
|
||||||
mkdir -p "$RUNDIR"
|
|
||||||
|
|
||||||
(
|
|
||||||
echo "Starting dockerd"
|
|
||||||
set -x
|
|
||||||
exec dockerd \\
|
|
||||||
--host="$DOCKER_HOST" \\
|
|
||||||
--exec-root="$RUNDIR/execroot" \\
|
|
||||||
--data-root="$RUNDIR/data" \\
|
|
||||||
--pidfile="$RUNDIR/docker.pid" \\
|
|
||||||
--userland-proxy=false \\
|
|
||||||
2>&1 | tee "$RUNDIR/dockerd.log"
|
|
||||||
) &
|
|
||||||
`;
|
|
||||||
|
|
||||||
export const setupDockerWinPs1Data = `
|
export const setupDockerWinPs1Data = `
|
||||||
[CmdletBinding()]
|
[CmdletBinding()]
|
||||||
param(
|
param(
|
||||||
@@ -91,7 +51,10 @@ param(
|
|||||||
[string]$RunDir,
|
[string]$RunDir,
|
||||||
|
|
||||||
[Parameter(Mandatory = $true)]
|
[Parameter(Mandatory = $true)]
|
||||||
[string]$DockerHost)
|
[string]$DockerHost,
|
||||||
|
|
||||||
|
[Parameter(Mandatory = $false)]
|
||||||
|
[string]$DaemonConfig)
|
||||||
|
|
||||||
$pwver = (Get-ItemProperty -Path HKLM:\\SOFTWARE\\Microsoft\\PowerShell\\3\\PowerShellEngine -Name 'PowerShellVersion').PowerShellVersion
|
$pwver = (Get-ItemProperty -Path HKLM:\\SOFTWARE\\Microsoft\\PowerShell\\3\\PowerShellEngine -Name 'PowerShellVersion').PowerShellVersion
|
||||||
Write-Host "PowerShell version: $pwver"
|
Write-Host "PowerShell version: $pwver"
|
||||||
@@ -119,6 +82,12 @@ if (Get-Service docker -ErrorAction SilentlyContinue) {
|
|||||||
$env:DOCKER_HOST = $DockerHost
|
$env:DOCKER_HOST = $DockerHost
|
||||||
Write-Host "DOCKER_HOST: $env:DOCKER_HOST"
|
Write-Host "DOCKER_HOST: $env:DOCKER_HOST"
|
||||||
|
|
||||||
|
if ($DaemonConfig) {
|
||||||
|
Write-Host "Writing Docker daemon config"
|
||||||
|
New-Item -ItemType Directory -Force -Path "$env:ProgramData\\Docker\\config"
|
||||||
|
$DaemonConfig | Out-File -FilePath "$env:ProgramData\\Docker\\config\\daemon.json"
|
||||||
|
}
|
||||||
|
|
||||||
Write-Host "Creating service"
|
Write-Host "Creating service"
|
||||||
New-Item -ItemType Directory "$RunDir\\moby-root" -ErrorAction SilentlyContinue | Out-Null
|
New-Item -ItemType Directory "$RunDir\\moby-root" -ErrorAction SilentlyContinue | Out-Null
|
||||||
New-Item -ItemType Directory "$RunDir\\moby-exec" -ErrorAction SilentlyContinue | Out-Null
|
New-Item -ItemType Directory "$RunDir\\moby-exec" -ErrorAction SilentlyContinue | Out-Null
|
||||||
@@ -245,7 +214,7 @@ forwardAgent: false
|
|||||||
#
|
#
|
||||||
# Colima default behaviour: buildkit enabled
|
# Colima default behaviour: buildkit enabled
|
||||||
# Default: {}
|
# Default: {}
|
||||||
docker: {}
|
{{daemonConfig}}
|
||||||
|
|
||||||
# Virtual Machine type (qemu, vz)
|
# Virtual Machine type (qemu, vz)
|
||||||
# NOTE: this is macOS 13 only. For Linux and macOS <13.0, qemu is always used.
|
# NOTE: this is macOS 13 only. For Linux and macOS <13.0, qemu is always used.
|
||||||
@@ -303,7 +272,7 @@ provision:
|
|||||||
script: |
|
script: |
|
||||||
mkdir -p /tmp/docker-bins
|
mkdir -p /tmp/docker-bins
|
||||||
cd /tmp/docker-bins
|
cd /tmp/docker-bins
|
||||||
wget -qO- "https://download.docker.com/linux/static/{{dockerChannel}}/{{hostArch}}/docker-{{dockerVersion}}.tgz" | tar xvz --strip 1
|
wget -qO- "https://download.docker.com/linux/static/{{dockerBinChannel}}/{{dockerBinArch}}/docker-{{dockerBinVersion}}.tgz" | tar xvz --strip 1
|
||||||
mv -f /tmp/docker-bins/* /usr/bin/
|
mv -f /tmp/docker-bins/* /usr/bin/
|
||||||
|
|
||||||
# Modify ~/.ssh/config automatically to include a SSH config for the virtual machine.
|
# Modify ~/.ssh/config automatically to include a SSH config for the virtual machine.
|
||||||
@@ -336,3 +305,14 @@ mounts: []
|
|||||||
# Default: {}
|
# Default: {}
|
||||||
env: {}
|
env: {}
|
||||||
`;
|
`;
|
||||||
|
|
||||||
|
export const qemuEntitlements = `
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||||
|
<plist version="1.0">
|
||||||
|
<dict>
|
||||||
|
<key>com.apple.security.hypervisor</key>
|
||||||
|
<true/>
|
||||||
|
</dict>
|
||||||
|
</plist>
|
||||||
|
`;
|
||||||
|
|||||||
@@ -14,17 +14,29 @@
|
|||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
import fs from 'fs';
|
||||||
import os from 'os';
|
import os from 'os';
|
||||||
import path from 'path';
|
import path from 'path';
|
||||||
import * as core from '@actions/core';
|
import * as core from '@actions/core';
|
||||||
import * as io from '@actions/io';
|
import * as io from '@actions/io';
|
||||||
|
|
||||||
import {Exec} from '../exec';
|
import {Exec} from '../exec';
|
||||||
|
|
||||||
|
import {ConfigFile} from '../types/docker';
|
||||||
|
|
||||||
export class Docker {
|
export class Docker {
|
||||||
static get configDir(): string {
|
static get configDir(): string {
|
||||||
return process.env.DOCKER_CONFIG || path.join(os.homedir(), '.docker');
|
return process.env.DOCKER_CONFIG || path.join(os.homedir(), '.docker');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static configFile(): ConfigFile | undefined {
|
||||||
|
const f = path.join(Docker.configDir, 'config.json');
|
||||||
|
if (!fs.existsSync(f)) {
|
||||||
|
return undefined;
|
||||||
|
}
|
||||||
|
return <ConfigFile>JSON.parse(fs.readFileSync(f, {encoding: 'utf-8'}));
|
||||||
|
}
|
||||||
|
|
||||||
public static async isAvailable(): Promise<boolean> {
|
public static async isAvailable(): Promise<boolean> {
|
||||||
return await io
|
return await io
|
||||||
.which('docker', true)
|
.which('docker', true)
|
||||||
|
|||||||
@@ -16,9 +16,11 @@
|
|||||||
|
|
||||||
import * as child_process from 'child_process';
|
import * as child_process from 'child_process';
|
||||||
import fs from 'fs';
|
import fs from 'fs';
|
||||||
|
import fsp from 'fs/promises';
|
||||||
import os from 'os';
|
import os from 'os';
|
||||||
import path from 'path';
|
import path from 'path';
|
||||||
import retry from 'async-retry';
|
import retry from 'async-retry';
|
||||||
|
import yaml from 'js-yaml';
|
||||||
import * as handlebars from 'handlebars';
|
import * as handlebars from 'handlebars';
|
||||||
import * as util from 'util';
|
import * as util from 'util';
|
||||||
import * as core from '@actions/core';
|
import * as core from '@actions/core';
|
||||||
@@ -29,7 +31,7 @@ import * as tc from '@actions/tool-cache';
|
|||||||
import {Context} from '../context';
|
import {Context} from '../context';
|
||||||
import {Exec} from '../exec';
|
import {Exec} from '../exec';
|
||||||
import {Util} from '../util';
|
import {Util} from '../util';
|
||||||
import {colimaYamlData, dockerServiceLogsPs1, setupDockerLinuxSh, setupDockerWinPs1} from './assets';
|
import {colimaYamlData, dockerServiceLogsPs1, qemuEntitlements, setupDockerWinPs1} from './assets';
|
||||||
import {GitHubRelease} from '../types/github';
|
import {GitHubRelease} from '../types/github';
|
||||||
|
|
||||||
export interface InstallOpts {
|
export interface InstallOpts {
|
||||||
@@ -37,6 +39,7 @@ export interface InstallOpts {
|
|||||||
channel?: string;
|
channel?: string;
|
||||||
runDir: string;
|
runDir: string;
|
||||||
contextName?: string;
|
contextName?: string;
|
||||||
|
daemonConfig?: string;
|
||||||
}
|
}
|
||||||
|
|
||||||
export class Install {
|
export class Install {
|
||||||
@@ -44,6 +47,7 @@ export class Install {
|
|||||||
private readonly version: string;
|
private readonly version: string;
|
||||||
private readonly channel: string;
|
private readonly channel: string;
|
||||||
private readonly contextName: string;
|
private readonly contextName: string;
|
||||||
|
private readonly daemonConfig?: string;
|
||||||
private _version: string | undefined;
|
private _version: string | undefined;
|
||||||
private _toolDir: string | undefined;
|
private _toolDir: string | undefined;
|
||||||
|
|
||||||
@@ -52,6 +56,7 @@ export class Install {
|
|||||||
this.version = opts.version || 'latest';
|
this.version = opts.version || 'latest';
|
||||||
this.channel = opts.channel || 'stable';
|
this.channel = opts.channel || 'stable';
|
||||||
this.contextName = opts.contextName || 'setup-docker-action';
|
this.contextName = opts.contextName || 'setup-docker-action';
|
||||||
|
this.daemonConfig = opts.daemonConfig;
|
||||||
}
|
}
|
||||||
|
|
||||||
get toolDir(): string {
|
get toolDir(): string {
|
||||||
@@ -137,16 +142,36 @@ export class Install {
|
|||||||
}
|
}
|
||||||
|
|
||||||
await core.group('Creating colima config', async () => {
|
await core.group('Creating colima config', async () => {
|
||||||
|
let colimaDaemonConfig = {};
|
||||||
|
if (this.daemonConfig) {
|
||||||
|
colimaDaemonConfig = JSON.parse(this.daemonConfig);
|
||||||
|
}
|
||||||
const colimaCfg = handlebars.compile(colimaYamlData)({
|
const colimaCfg = handlebars.compile(colimaYamlData)({
|
||||||
hostArch: Install.platformArch(),
|
daemonConfig: yaml.dump(yaml.load(JSON.stringify({docker: colimaDaemonConfig}))),
|
||||||
dockerVersion: this._version,
|
dockerBinVersion: this._version,
|
||||||
dockerChannel: this.channel
|
dockerBinChannel: this.channel,
|
||||||
|
dockerBinArch: Install.platformArch()
|
||||||
});
|
});
|
||||||
core.info(`Writing colima config to ${path.join(colimaDir, 'colima.yaml')}`);
|
core.info(`Writing colima config to ${path.join(colimaDir, 'colima.yaml')}`);
|
||||||
fs.writeFileSync(path.join(colimaDir, 'colima.yaml'), colimaCfg);
|
fs.writeFileSync(path.join(colimaDir, 'colima.yaml'), colimaCfg);
|
||||||
core.info(colimaCfg);
|
core.info(colimaCfg);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
const qemuArch = await Install.qemuArch();
|
||||||
|
await core.group('QEMU version', async () => {
|
||||||
|
await Exec.exec(`qemu-system-${qemuArch} --version`);
|
||||||
|
});
|
||||||
|
|
||||||
|
// https://github.com/abiosoft/colima/issues/786#issuecomment-1693629650
|
||||||
|
if (process.env.SIGN_QEMU_BINARY === '1') {
|
||||||
|
await core.group('Signing QEMU binary with entitlements', async () => {
|
||||||
|
const qemuEntitlementsFile = path.join(Context.tmpDir(), 'qemu-entitlements.xml');
|
||||||
|
core.info(`Writing entitlements to ${qemuEntitlementsFile}`);
|
||||||
|
fs.writeFileSync(qemuEntitlementsFile, qemuEntitlements);
|
||||||
|
await Exec.exec(`codesign --sign - --entitlements ${qemuEntitlementsFile} --force /usr/local/bin/qemu-system-${qemuArch}`);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
// colima is already started on the runner so env var added in download
|
// colima is already started on the runner so env var added in download
|
||||||
// method is not expanded to the running process.
|
// method is not expanded to the running process.
|
||||||
const envs = Object.assign({}, process.env, {
|
const envs = Object.assign({}, process.env, {
|
||||||
@@ -154,8 +179,34 @@ export class Install {
|
|||||||
}) as {
|
}) as {
|
||||||
[key: string]: string;
|
[key: string]: string;
|
||||||
};
|
};
|
||||||
|
|
||||||
await core.group('Starting colima', async () => {
|
await core.group('Starting colima', async () => {
|
||||||
await Exec.exec('colima', ['start', '--very-verbose'], {env: envs});
|
const colimaStartArgs = ['start', '--very-verbose'];
|
||||||
|
if (process.env.COLIMA_START_ARGS) {
|
||||||
|
colimaStartArgs.push(process.env.COLIMA_START_ARGS);
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
await Exec.exec(`colima ${colimaStartArgs.join(' ')}`, [], {env: envs});
|
||||||
|
} catch (e) {
|
||||||
|
const limaColimaDir = path.join(os.homedir(), '.lima', 'colima');
|
||||||
|
fsp
|
||||||
|
.readdir(limaColimaDir)
|
||||||
|
.then(files => {
|
||||||
|
files
|
||||||
|
.filter(f => path.extname(f) === '.log')
|
||||||
|
.forEach(f => {
|
||||||
|
const logfile = path.join(limaColimaDir, f);
|
||||||
|
const logcontent = fs.readFileSync(logfile, {encoding: 'utf8'}).trim();
|
||||||
|
if (logcontent.length > 0) {
|
||||||
|
core.info(`### ${logfile}:\n${logcontent}`);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
})
|
||||||
|
.catch(() => {
|
||||||
|
// ignore
|
||||||
|
});
|
||||||
|
throw e;
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
await core.group('Create Docker context', async () => {
|
await core.group('Create Docker context', async () => {
|
||||||
@@ -168,46 +219,72 @@ export class Install {
|
|||||||
const dockerHost = `unix://${path.join(this.runDir, 'docker.sock')}`;
|
const dockerHost = `unix://${path.join(this.runDir, 'docker.sock')}`;
|
||||||
await io.mkdirP(this.runDir);
|
await io.mkdirP(this.runDir);
|
||||||
|
|
||||||
|
const daemonConfigPath = path.join(this.runDir, 'daemon.json');
|
||||||
|
await fs.writeFileSync(daemonConfigPath, '{}');
|
||||||
|
|
||||||
|
let daemonConfig = undefined;
|
||||||
|
const daemonConfigDefaultPath = '/etc/docker/daemon.json';
|
||||||
|
if (fs.existsSync(daemonConfigDefaultPath)) {
|
||||||
|
await core.group('Default Docker daemon config found', async () => {
|
||||||
|
core.info(JSON.stringify(JSON.parse(fs.readFileSync(daemonConfigDefaultPath, {encoding: 'utf8'})), null, 2));
|
||||||
|
});
|
||||||
|
daemonConfig = JSON.parse(fs.readFileSync(daemonConfigDefaultPath, {encoding: 'utf8'}));
|
||||||
|
}
|
||||||
|
if (this.daemonConfig) {
|
||||||
|
daemonConfig = Object.assign(daemonConfig || {}, JSON.parse(this.daemonConfig));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (daemonConfig) {
|
||||||
|
const daemonConfigStr = JSON.stringify(daemonConfig, null, 2);
|
||||||
|
await core.group('Writing Docker daemon config', async () => {
|
||||||
|
fs.writeFileSync(daemonConfigPath, daemonConfigStr);
|
||||||
|
core.info(daemonConfigStr);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
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 proc = await child_process.spawn(`sudo -E ${bashPath} ${setupDockerLinuxSh()}`, [], {
|
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`;
|
||||||
detached: true,
|
core.info(`[command] ${cmd}`); // https://github.com/actions/toolkit/blob/3d652d3133965f63309e4b2e1c8852cdbdcb3833/packages/exec/src/toolrunner.ts#L47
|
||||||
shell: true,
|
const proc = await child_process.spawn(
|
||||||
stdio: ['ignore', process.stdout, process.stderr],
|
// We can't use Exec.exec here because we need to detach the process to
|
||||||
env: Object.assign({}, process.env, {
|
// avoid killing it when the action finishes running. Even if detached,
|
||||||
TOOLDIR: this.toolDir,
|
// we also need to run dockerd in a subshell and unref the process so
|
||||||
RUNDIR: this.runDir,
|
// GitHub Action doesn't wait for it to finish.
|
||||||
DOCKER_HOST: dockerHost
|
`sudo -E ${bashPath} << EOF
|
||||||
}) as {
|
( ${cmd} 2>&1 | tee "${this.runDir}/dockerd.log" ) &
|
||||||
[key: string]: string;
|
EOF`,
|
||||||
|
[],
|
||||||
|
{
|
||||||
|
detached: true,
|
||||||
|
shell: true,
|
||||||
|
stdio: ['ignore', process.stdout, process.stderr]
|
||||||
}
|
}
|
||||||
});
|
);
|
||||||
proc.unref();
|
proc.unref();
|
||||||
|
await Util.sleep(3);
|
||||||
|
const retries = 10;
|
||||||
await retry(
|
await retry(
|
||||||
async bail => {
|
async bail => {
|
||||||
await Exec.getExecOutput(`docker version`, undefined, {
|
try {
|
||||||
ignoreReturnCode: true,
|
await Exec.getExecOutput(`docker version`, undefined, {
|
||||||
silent: true,
|
silent: true,
|
||||||
env: Object.assign({}, process.env, {
|
env: Object.assign({}, process.env, {
|
||||||
DOCKER_HOST: dockerHost
|
DOCKER_HOST: dockerHost
|
||||||
}) as {
|
}) as {
|
||||||
[key: string]: string;
|
[key: string]: string;
|
||||||
}
|
|
||||||
})
|
|
||||||
.then(res => {
|
|
||||||
if (res.stderr.length > 0 && res.exitCode != 0) {
|
|
||||||
bail(new Error(res.stderr));
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
return res.exitCode == 0;
|
|
||||||
})
|
|
||||||
.catch(error => {
|
|
||||||
bail(error);
|
|
||||||
return false;
|
|
||||||
});
|
});
|
||||||
|
} catch (e) {
|
||||||
|
bail(e);
|
||||||
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
retries: 5
|
retries: retries,
|
||||||
|
minTimeout: 1000,
|
||||||
|
onRetry: (err, i) => {
|
||||||
|
core.info(`${err}. Retrying (${i}/${retries})...`);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
core.info(`Docker daemon started started successfully`);
|
core.info(`Docker daemon started started successfully`);
|
||||||
@@ -222,11 +299,32 @@ export class Install {
|
|||||||
private async installWindows(): Promise<void> {
|
private async installWindows(): Promise<void> {
|
||||||
const dockerHost = 'npipe:////./pipe/setup_docker_action';
|
const dockerHost = 'npipe:////./pipe/setup_docker_action';
|
||||||
|
|
||||||
|
let daemonConfig = undefined;
|
||||||
|
const daemonConfigPath = path.join(this.runDir, 'daemon.json');
|
||||||
|
if (fs.existsSync(daemonConfigPath)) {
|
||||||
|
await core.group('Default Docker daemon config found', async () => {
|
||||||
|
core.info(JSON.stringify(JSON.parse(fs.readFileSync(daemonConfigPath, {encoding: 'utf8'})), null, 2));
|
||||||
|
});
|
||||||
|
daemonConfig = JSON.parse(fs.readFileSync(daemonConfigPath, {encoding: 'utf8'}));
|
||||||
|
}
|
||||||
|
if (this.daemonConfig) {
|
||||||
|
daemonConfig = Object.assign(daemonConfig || {}, JSON.parse(this.daemonConfig));
|
||||||
|
}
|
||||||
|
|
||||||
|
let daemonConfigStr = '{}';
|
||||||
|
if (daemonConfig) {
|
||||||
|
daemonConfigStr = JSON.stringify(daemonConfig, null, 2);
|
||||||
|
await core.group('Docker daemon config', async () => {
|
||||||
|
core.info(daemonConfigStr);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
await core.group('Install Docker daemon service', async () => {
|
await core.group('Install Docker daemon service', async () => {
|
||||||
const setupCmd = await Util.powershellCommand(setupDockerWinPs1(), {
|
const setupCmd = await Util.powershellCommand(setupDockerWinPs1(), {
|
||||||
ToolDir: this.toolDir,
|
ToolDir: this.toolDir,
|
||||||
RunDir: this.runDir,
|
RunDir: this.runDir,
|
||||||
DockerHost: dockerHost
|
DockerHost: dockerHost,
|
||||||
|
DaemonConfig: daemonConfigStr
|
||||||
});
|
});
|
||||||
await Exec.exec(setupCmd.command, setupCmd.args);
|
await Exec.exec(setupCmd.command, setupCmd.args);
|
||||||
const logCmd = await Util.powershellCommand(dockerServiceLogsPs1());
|
const logCmd = await Util.powershellCommand(dockerServiceLogsPs1());
|
||||||
@@ -282,13 +380,17 @@ export class Install {
|
|||||||
core.info(fs.readFileSync(path.join(this.runDir, 'dockerd.log'), {encoding: 'utf8'}));
|
core.info(fs.readFileSync(path.join(this.runDir, 'dockerd.log'), {encoding: 'utf8'}));
|
||||||
});
|
});
|
||||||
await core.group('Stopping Docker daemon', async () => {
|
await core.group('Stopping Docker daemon', async () => {
|
||||||
await Exec.exec('sudo', ['kill', fs.readFileSync(path.join(this.runDir, 'docker.pid')).toString().trim()]);
|
await Exec.exec('sudo', ['kill', '-s', 'SIGTERM', fs.readFileSync(path.join(this.runDir, 'docker.pid')).toString().trim()]);
|
||||||
|
await Util.sleep(5);
|
||||||
});
|
});
|
||||||
await core.group('Removing Docker context', async () => {
|
await core.group('Removing Docker context', async () => {
|
||||||
await Exec.exec('docker', ['context', 'rm', '-f', this.contextName]);
|
await Exec.exec('docker', ['context', 'rm', '-f', this.contextName]);
|
||||||
});
|
});
|
||||||
await core.group(`Cleaning up runDir`, async () => {
|
await core.group(`Cleaning up runDir`, async () => {
|
||||||
await Exec.exec('sudo', ['rm', '-rf', this.runDir]);
|
await Exec.exec('sudo', ['rm', '-rf', this.runDir], {
|
||||||
|
ignoreReturnCode: true,
|
||||||
|
failOnStdErr: false
|
||||||
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -334,6 +436,9 @@ export class Install {
|
|||||||
case 'ppc64': {
|
case 'ppc64': {
|
||||||
return 'ppc64le';
|
return 'ppc64le';
|
||||||
}
|
}
|
||||||
|
case 'arm64': {
|
||||||
|
return 'aarch64';
|
||||||
|
}
|
||||||
case 'arm': {
|
case 'arm': {
|
||||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||||
const arm_version = (process.config.variables as any).arm_version;
|
const arm_version = (process.config.variables as any).arm_version;
|
||||||
@@ -368,6 +473,20 @@ export class Install {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static async qemuArch(): Promise<string> {
|
||||||
|
switch (os.arch()) {
|
||||||
|
case 'x64': {
|
||||||
|
return 'x86_64';
|
||||||
|
}
|
||||||
|
case 'arm64': {
|
||||||
|
return 'aarch64';
|
||||||
|
}
|
||||||
|
default: {
|
||||||
|
return os.arch();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public static async getRelease(version: string): Promise<GitHubRelease> {
|
public static async getRelease(version: string): Promise<GitHubRelease> {
|
||||||
const url = `https://raw.githubusercontent.com/docker/actions-toolkit/main/.github/docker-releases.json`;
|
const url = `https://raw.githubusercontent.com/docker/actions-toolkit/main/.github/docker-releases.json`;
|
||||||
const http: httpm.HttpClient = new httpm.HttpClient('docker-actions-toolkit');
|
const http: httpm.HttpClient = new httpm.HttpClient('docker-actions-toolkit');
|
||||||
|
|||||||
66
src/git.ts
66
src/git.ts
@@ -14,8 +14,14 @@
|
|||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
import * as core from '@actions/core';
|
||||||
|
import {Octokit} from '@octokit/core';
|
||||||
|
import {restEndpointMethods} from '@octokit/plugin-rest-endpoint-methods';
|
||||||
|
|
||||||
import {Exec} from './exec';
|
import {Exec} from './exec';
|
||||||
|
import {GitHub} from './github';
|
||||||
import {Context} from '@actions/github/lib/context';
|
import {Context} from '@actions/github/lib/context';
|
||||||
|
|
||||||
import {Context as GitContext} from './types/git';
|
import {Context as GitContext} from './types/git';
|
||||||
|
|
||||||
export class Git {
|
export class Git {
|
||||||
@@ -36,7 +42,29 @@ export class Git {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
public static async remoteSha(repo: string, ref: string): Promise<string> {
|
public static async remoteSha(repo: string, ref: string, token?: string): Promise<string> {
|
||||||
|
const repoMatch = repo.match(/github.com\/([^/]+)\/([^/]+?)(?:\.git)?(\/|$)/);
|
||||||
|
// if we have a token and this is a GitHub repo we can use the GitHub API
|
||||||
|
if (token && repoMatch) {
|
||||||
|
core.setSecret(token);
|
||||||
|
const octokit = new (Octokit.plugin(restEndpointMethods).defaults({
|
||||||
|
baseUrl: GitHub.apiURL
|
||||||
|
}))({auth: token});
|
||||||
|
const [owner, repoName] = repoMatch.slice(1, 3);
|
||||||
|
try {
|
||||||
|
return (
|
||||||
|
await octokit.rest.repos.listCommits({
|
||||||
|
owner: owner,
|
||||||
|
repo: repoName,
|
||||||
|
sha: ref,
|
||||||
|
per_page: 1
|
||||||
|
})
|
||||||
|
).data[0].sha;
|
||||||
|
} catch (e) {
|
||||||
|
throw new Error(`Cannot find remote ref for ${repo}#${ref}: ${e.message}`);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// otherwise we fall back to git ls-remote
|
||||||
return await Git.exec(['ls-remote', repo, ref]).then(out => {
|
return await Git.exec(['ls-remote', repo, ref]).then(out => {
|
||||||
const [rsha] = out.split(/[\s\t]/);
|
const [rsha] = out.split(/[\s\t]/);
|
||||||
if (rsha.length == 0) {
|
if (rsha.length == 0) {
|
||||||
@@ -61,6 +89,11 @@ export class Git {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static async ref(): Promise<string> {
|
public static async ref(): Promise<string> {
|
||||||
|
const isHeadDetached = await Git.isHeadDetached();
|
||||||
|
if (isHeadDetached) {
|
||||||
|
return await Git.getDetachedRef();
|
||||||
|
}
|
||||||
|
|
||||||
return await Git.exec(['symbolic-ref', 'HEAD']);
|
return await Git.exec(['symbolic-ref', 'HEAD']);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -81,6 +114,37 @@ export class Git {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static async isHeadDetached(): Promise<boolean> {
|
||||||
|
return await Git.exec(['branch', '--show-current']).then(res => {
|
||||||
|
return res.length == 0;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
private static async getDetachedRef(): Promise<string> {
|
||||||
|
const res = await Git.exec(['show', '-s', '--pretty=%D']);
|
||||||
|
|
||||||
|
const refMatch = res.match(/^HEAD, (.*)$/);
|
||||||
|
|
||||||
|
if (!refMatch) {
|
||||||
|
throw new Error(`Cannot find detached HEAD ref in "${res}"`);
|
||||||
|
}
|
||||||
|
|
||||||
|
const ref = refMatch[1].trim();
|
||||||
|
|
||||||
|
// Tag refs are formatted as "tag: <tagname>"
|
||||||
|
if (ref.startsWith('tag: ')) {
|
||||||
|
return `refs/tags/${ref.split(':')[1].trim()}`;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Otherwise, it's a branch "<origin>/<branch-name>, <branch-name>"
|
||||||
|
const branchMatch = ref.match(/^[^/]+\/[^/]+, (.+)$/);
|
||||||
|
if (branchMatch) {
|
||||||
|
return `refs/heads/${branchMatch[1].trim()}`;
|
||||||
|
}
|
||||||
|
|
||||||
|
throw new Error(`Unsupported detached HEAD ref in "${res}"`);
|
||||||
|
}
|
||||||
|
|
||||||
private static async exec(args: string[] = []): Promise<string> {
|
private static async exec(args: string[] = []): Promise<string> {
|
||||||
return await Exec.getExecOutput(`git`, args, {
|
return await Exec.getExecOutput(`git`, args, {
|
||||||
ignoreReturnCode: true,
|
ignoreReturnCode: true,
|
||||||
|
|||||||
@@ -32,4 +32,13 @@ export interface Node {
|
|||||||
export interface NodeInfo extends Node {
|
export interface NodeInfo extends Node {
|
||||||
status?: string;
|
status?: string;
|
||||||
buildkit?: string;
|
buildkit?: string;
|
||||||
|
labels?: Record<string, string>;
|
||||||
|
gcPolicy?: Array<GCPolicy>;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface GCPolicy {
|
||||||
|
all?: boolean;
|
||||||
|
filter?: string[];
|
||||||
|
keepDuration?: string;
|
||||||
|
keepBytes?: string;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -19,3 +19,10 @@ export interface Cert {
|
|||||||
cert?: string;
|
cert?: string;
|
||||||
key?: string;
|
key?: string;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export interface DownloadVersion {
|
||||||
|
key: string;
|
||||||
|
version: string;
|
||||||
|
downloadURL: string;
|
||||||
|
releasesURL: string;
|
||||||
|
}
|
||||||
|
|||||||
66
src/types/docker.ts
Normal file
66
src/types/docker.ts
Normal file
@@ -0,0 +1,66 @@
|
|||||||
|
/**
|
||||||
|
* Copyright 2023 actions-toolkit authors
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
// https://github.com/docker/cli/blob/master/cli/config/configfile/file.go
|
||||||
|
export interface ConfigFile {
|
||||||
|
auths: Record<string, AuthConfig>;
|
||||||
|
HttpHeaders?: Record<string, string>;
|
||||||
|
psFormat?: string;
|
||||||
|
imagesFormat?: string;
|
||||||
|
networksFormat?: string;
|
||||||
|
pluginsFormat?: string;
|
||||||
|
volumesFormat?: string;
|
||||||
|
statsFormat?: string;
|
||||||
|
detachKeys?: string;
|
||||||
|
credsStore?: string;
|
||||||
|
credHelpers?: Record<string, string>;
|
||||||
|
serviceInspectFormat?: string;
|
||||||
|
servicesFormat?: string;
|
||||||
|
tasksFormat?: string;
|
||||||
|
secretFormat?: string;
|
||||||
|
configFormat?: string;
|
||||||
|
nodesFormat?: string;
|
||||||
|
pruneFilters?: string[];
|
||||||
|
proxies?: Record<string, ProxyConfig>;
|
||||||
|
experimental?: string;
|
||||||
|
stackOrchestrator?: string;
|
||||||
|
kubernetes?: KubernetesConfig;
|
||||||
|
currentContext?: string;
|
||||||
|
cliPluginsExtraDirs?: string[];
|
||||||
|
plugins?: Record<string, Record<string, string>>;
|
||||||
|
aliases?: Record<string, string>;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface ProxyConfig {
|
||||||
|
httpProxy?: string;
|
||||||
|
httpsProxy?: string;
|
||||||
|
noProxy?: string;
|
||||||
|
ftpProxy?: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface KubernetesConfig {
|
||||||
|
allNamespaces?: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface AuthConfig {
|
||||||
|
username?: string;
|
||||||
|
password?: string;
|
||||||
|
auth?: string;
|
||||||
|
email?: string;
|
||||||
|
serveraddress?: string;
|
||||||
|
identitytoken?: string;
|
||||||
|
registrytoken?: string;
|
||||||
|
}
|
||||||
29
src/util.ts
29
src/util.ts
@@ -21,6 +21,7 @@ import {parse} from 'csv-parse/sync';
|
|||||||
|
|
||||||
export interface InputListOpts {
|
export interface InputListOpts {
|
||||||
ignoreComma?: boolean;
|
ignoreComma?: boolean;
|
||||||
|
comment?: string;
|
||||||
quote?: string | boolean | Buffer | null;
|
quote?: string | boolean | Buffer | null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -36,7 +37,7 @@ export class Util {
|
|||||||
const records = parse(items, {
|
const records = parse(items, {
|
||||||
columns: false,
|
columns: false,
|
||||||
relaxQuotes: true,
|
relaxQuotes: true,
|
||||||
comment: '#',
|
comment: opts?.comment,
|
||||||
relaxColumnCount: true,
|
relaxColumnCount: true,
|
||||||
skipEmptyLines: true,
|
skipEmptyLines: true,
|
||||||
quote: opts?.quote
|
quote: opts?.quote
|
||||||
@@ -110,4 +111,30 @@ export class Util {
|
|||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static trimPrefix(str: string, suffix: string): string {
|
||||||
|
if (!str || !suffix) {
|
||||||
|
return str;
|
||||||
|
}
|
||||||
|
const index = str.indexOf(suffix);
|
||||||
|
if (index !== 0) {
|
||||||
|
return str;
|
||||||
|
}
|
||||||
|
return str.substring(suffix.length);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static trimSuffix(str: string, suffix: string): string {
|
||||||
|
if (!str || !suffix) {
|
||||||
|
return str;
|
||||||
|
}
|
||||||
|
const index = str.lastIndexOf(suffix);
|
||||||
|
if (index === -1 || index + suffix.length !== str.length) {
|
||||||
|
return str;
|
||||||
|
}
|
||||||
|
return str.substring(0, index);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static sleep(seconds: number) {
|
||||||
|
return new Promise(resolve => setTimeout(resolve, seconds * 1000));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,8 +1,9 @@
|
|||||||
{
|
{
|
||||||
"compilerOptions": {
|
"compilerOptions": {
|
||||||
"esModuleInterop": true,
|
"esModuleInterop": true,
|
||||||
"target": "es6",
|
"target": "ES2022",
|
||||||
"module": "commonjs",
|
"module": "nodenext",
|
||||||
|
"moduleResolution": "nodenext",
|
||||||
"strict": true,
|
"strict": true,
|
||||||
"declaration": true,
|
"declaration": true,
|
||||||
"sourceMap": true,
|
"sourceMap": true,
|
||||||
|
|||||||
Reference in New Issue
Block a user