Compare commits
177 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
c65952ed7a | ||
|
|
6336902578 | ||
|
|
a59a5f8e3f | ||
|
|
3b49d01274 | ||
|
|
53822af427 | ||
|
|
deeee5473b | ||
|
|
eec0a5d809 | ||
|
|
b4d81c6478 | ||
|
|
6e3f195d06 | ||
|
|
fc3d393292 | ||
|
|
19ca9ade20 | ||
|
|
8b84506b77 | ||
|
|
ccc7548899 | ||
|
|
5f0354dc09 | ||
|
|
3af0a38475 | ||
|
|
acd6a3be6b | ||
|
|
3b9fba85ba | ||
|
|
38d1dce1ff | ||
|
|
958f229292 | ||
|
|
368e2f559c | ||
|
|
18c8bddca3 | ||
|
|
8fb39d62bf | ||
|
|
6c05e09cb8 | ||
|
|
6dba8dc42a | ||
|
|
dacd1a0351 | ||
|
|
ff0fe9337b | ||
|
|
7332e980c7 | ||
|
|
420500d6c6 | ||
|
|
e22a137638 | ||
|
|
c7601fda48 | ||
|
|
dd3654acca | ||
|
|
1604b83b79 | ||
|
|
b6a6e78f7c | ||
|
|
9fbffd2960 | ||
|
|
49c5ada43e | ||
|
|
15cf6afee9 | ||
|
|
8fc5c75c58 | ||
|
|
32f329f9c4 | ||
|
|
d031b23972 | ||
|
|
654304bb85 | ||
|
|
d50c73260b | ||
|
|
f47c55533e | ||
|
|
e30303f84e | ||
|
|
e0dd306fe3 | ||
|
|
1ff7272118 | ||
|
|
62744e2178 | ||
|
|
4aeef48155 | ||
|
|
5f9d6510f7 | ||
|
|
b7646ad39d | ||
|
|
efc11464fc | ||
|
|
4f6056bbea | ||
|
|
2eba5d9d10 | ||
|
|
983de45621 | ||
|
|
e132497440 | ||
|
|
fa18b49fe7 | ||
|
|
b54c662ac6 | ||
|
|
44ba4a2d72 | ||
|
|
89857b067b | ||
|
|
1b167c2c3e | ||
|
|
6c041738b9 | ||
|
|
824e1e31e7 | ||
|
|
7185076486 | ||
|
|
a1d9cba77d | ||
|
|
f27512c22d | ||
|
|
10b503e7f6 | ||
|
|
199910c295 | ||
|
|
881ec509f3 | ||
|
|
ba0508be76 | ||
|
|
9bbfda97a3 | ||
|
|
ded2f5536d | ||
|
|
e97959223c | ||
|
|
7c54753700 | ||
|
|
ebf0787efa | ||
|
|
f751af96ee | ||
|
|
1f95d41238 | ||
|
|
3543c64504 | ||
|
|
eb838bda3a | ||
|
|
aa8033de8f | ||
|
|
a8cf50098a | ||
|
|
42e59b7a6c | ||
|
|
477e96d237 | ||
|
|
05e3bb5b86 | ||
|
|
11c483e5c9 | ||
|
|
491039b9e3 | ||
|
|
a777edf0f6 | ||
|
|
a60e66444e | ||
|
|
f94786cf56 | ||
|
|
09e67cefea | ||
|
|
c5fb2b6f30 | ||
|
|
1416ff392b | ||
|
|
e4b0b455d8 | ||
|
|
ce4ab4d3d2 | ||
|
|
b7405db71f | ||
|
|
fbf0d5ba85 | ||
|
|
66531a2912 | ||
|
|
1c34ae09f0 | ||
|
|
6df98c1aad | ||
|
|
a9bd3f5b6b | ||
|
|
f7a8b21610 | ||
|
|
8177e153d6 | ||
|
|
a14ead6486 | ||
|
|
f9de623b1d | ||
|
|
202104bf16 | ||
|
|
b6b4cf170e | ||
|
|
311ae1dacc | ||
|
|
163d33a2bd | ||
|
|
d283be916f | ||
|
|
ffc7d98a98 | ||
|
|
d36bef4156 | ||
|
|
300c014384 | ||
|
|
b641895e8b | ||
|
|
4db21c4b43 | ||
|
|
8d807b6902 | ||
|
|
99e6b01d39 | ||
|
|
23208073ee | ||
|
|
2264b5ac72 | ||
|
|
d5247558ad | ||
|
|
e5ef18078d | ||
|
|
517914fc72 | ||
|
|
4c7e849bb4 | ||
|
|
ce0d3d5cf1 | ||
|
|
90311d5c08 | ||
|
|
d908ffcd2c | ||
|
|
3bd6acf499 | ||
|
|
5b4c1ac025 | ||
|
|
e49e07d23e | ||
|
|
b4c8e1a503 | ||
|
|
1510b1d394 | ||
|
|
214e644835 | ||
|
|
d7a84a5d46 | ||
|
|
61967435c1 | ||
|
|
78ca5b7f21 | ||
|
|
cc344864cb | ||
|
|
c70efab546 | ||
|
|
55a2181286 | ||
|
|
846cac2aa2 | ||
|
|
83d63d1cf1 | ||
|
|
931b62d64f | ||
|
|
16ecd76490 | ||
|
|
b26af9f868 | ||
|
|
ff35e30b01 | ||
|
|
200e43c426 | ||
|
|
2cb2c5573f | ||
|
|
f2de331691 | ||
|
|
27254cb337 | ||
|
|
c8df3474bd | ||
|
|
fe9937dd36 | ||
|
|
8785275da1 | ||
|
|
7bd4fed6bc | ||
|
|
18fbe0cb64 | ||
|
|
7360d08bf9 | ||
|
|
644587f0d1 | ||
|
|
3a7b0a6080 | ||
|
|
2e70a0cac6 | ||
|
|
e600fe266c | ||
|
|
52d663521a | ||
|
|
dceb603792 | ||
|
|
77b8d647eb | ||
|
|
630b180101 | ||
|
|
2e536e4a37 | ||
|
|
40f2a14d95 | ||
|
|
9853314413 | ||
|
|
f2e65ab473 | ||
|
|
e130c40c84 | ||
|
|
bbf0a8d268 | ||
|
|
4ce8a708c9 | ||
|
|
6f66565779 | ||
|
|
504af69bd9 | ||
|
|
f3734ee134 | ||
|
|
4183444df2 | ||
|
|
a5466523c1 | ||
|
|
e0007fb5cd | ||
|
|
c330895cef | ||
|
|
e7017a21b8 | ||
|
|
b56d9771d7 | ||
|
|
680ab5bdf1 | ||
|
|
5ea53e0090 |
17
.github/actions/macos-setup-qemu/action.yml
vendored
Normal file
17
.github/actions/macos-setup-qemu/action.yml
vendored
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
name: 'Setup QEMU on macOS'
|
||||||
|
description: 'Set up QEMU on macOS runners'
|
||||||
|
|
||||||
|
# FIXME: Remove this composite once QEMU issue is fixed on macOS runners
|
||||||
|
# https://github.com/docker/actions-toolkit/issues/455
|
||||||
|
|
||||||
|
runs:
|
||||||
|
using: composite
|
||||||
|
steps:
|
||||||
|
- run: |
|
||||||
|
set -ex
|
||||||
|
brew uninstall --ignore-dependencies qemu || true
|
||||||
|
brew autoremove || true
|
||||||
|
curl -o /tmp/qemu.rb https://raw.githubusercontent.com/Homebrew/homebrew-core/f1a9cf104a9a51779c7a532b658c490f69974839/Formula/q/qemu.rb
|
||||||
|
brew install /tmp/qemu.rb
|
||||||
|
continue-on-error: true
|
||||||
|
shell: bash
|
||||||
197
.github/buildx-lab-releases.json
vendored
197
.github/buildx-lab-releases.json
vendored
@@ -1,43 +1,166 @@
|
|||||||
{
|
{
|
||||||
"latest": {
|
"latest": {
|
||||||
"id": 157588052,
|
"id": 174998914,
|
||||||
"tag_name": "v0.14.1-desktop.1",
|
"tag_name": "v0.17.1-desktop.1",
|
||||||
"html_url": "https://github.com/docker/buildx-desktop/releases/tag/v0.14.1-desktop.1",
|
"html_url": "https://github.com/docker/buildx-desktop/releases/tag/v0.17.1-desktop.1",
|
||||||
"assets": [
|
"assets": [
|
||||||
"https://github.com/docker/buildx-desktop/releases/download/v0.14.1-desktop.1/buildx-v0.14.1-desktop.1.darwin-amd64",
|
"https://github.com/docker/buildx-desktop/releases/download/v0.17.1-desktop.1/buildx-v0.17.1-desktop.1.darwin-amd64",
|
||||||
"https://github.com/docker/buildx-desktop/releases/download/v0.14.1-desktop.1/buildx-v0.14.1-desktop.1.darwin-amd64.provenance.json",
|
"https://github.com/docker/buildx-desktop/releases/download/v0.17.1-desktop.1/buildx-v0.17.1-desktop.1.darwin-amd64.provenance.json",
|
||||||
"https://github.com/docker/buildx-desktop/releases/download/v0.14.1-desktop.1/buildx-v0.14.1-desktop.1.darwin-amd64.sbom.json",
|
"https://github.com/docker/buildx-desktop/releases/download/v0.17.1-desktop.1/buildx-v0.17.1-desktop.1.darwin-amd64.sbom.json",
|
||||||
"https://github.com/docker/buildx-desktop/releases/download/v0.14.1-desktop.1/buildx-v0.14.1-desktop.1.darwin-arm64",
|
"https://github.com/docker/buildx-desktop/releases/download/v0.17.1-desktop.1/buildx-v0.17.1-desktop.1.darwin-arm64",
|
||||||
"https://github.com/docker/buildx-desktop/releases/download/v0.14.1-desktop.1/buildx-v0.14.1-desktop.1.darwin-arm64.provenance.json",
|
"https://github.com/docker/buildx-desktop/releases/download/v0.17.1-desktop.1/buildx-v0.17.1-desktop.1.darwin-arm64.provenance.json",
|
||||||
"https://github.com/docker/buildx-desktop/releases/download/v0.14.1-desktop.1/buildx-v0.14.1-desktop.1.darwin-arm64.sbom.json",
|
"https://github.com/docker/buildx-desktop/releases/download/v0.17.1-desktop.1/buildx-v0.17.1-desktop.1.darwin-arm64.sbom.json",
|
||||||
"https://github.com/docker/buildx-desktop/releases/download/v0.14.1-desktop.1/buildx-v0.14.1-desktop.1.linux-amd64",
|
"https://github.com/docker/buildx-desktop/releases/download/v0.17.1-desktop.1/buildx-v0.17.1-desktop.1.linux-amd64",
|
||||||
"https://github.com/docker/buildx-desktop/releases/download/v0.14.1-desktop.1/buildx-v0.14.1-desktop.1.linux-amd64.provenance.json",
|
"https://github.com/docker/buildx-desktop/releases/download/v0.17.1-desktop.1/buildx-v0.17.1-desktop.1.linux-amd64.provenance.json",
|
||||||
"https://github.com/docker/buildx-desktop/releases/download/v0.14.1-desktop.1/buildx-v0.14.1-desktop.1.linux-amd64.sbom.json",
|
"https://github.com/docker/buildx-desktop/releases/download/v0.17.1-desktop.1/buildx-v0.17.1-desktop.1.linux-amd64.sbom.json",
|
||||||
"https://github.com/docker/buildx-desktop/releases/download/v0.14.1-desktop.1/buildx-v0.14.1-desktop.1.linux-arm-v6",
|
"https://github.com/docker/buildx-desktop/releases/download/v0.17.1-desktop.1/buildx-v0.17.1-desktop.1.linux-arm-v6",
|
||||||
"https://github.com/docker/buildx-desktop/releases/download/v0.14.1-desktop.1/buildx-v0.14.1-desktop.1.linux-arm-v6.provenance.json",
|
"https://github.com/docker/buildx-desktop/releases/download/v0.17.1-desktop.1/buildx-v0.17.1-desktop.1.linux-arm-v6.provenance.json",
|
||||||
"https://github.com/docker/buildx-desktop/releases/download/v0.14.1-desktop.1/buildx-v0.14.1-desktop.1.linux-arm-v6.sbom.json",
|
"https://github.com/docker/buildx-desktop/releases/download/v0.17.1-desktop.1/buildx-v0.17.1-desktop.1.linux-arm-v6.sbom.json",
|
||||||
"https://github.com/docker/buildx-desktop/releases/download/v0.14.1-desktop.1/buildx-v0.14.1-desktop.1.linux-arm-v7",
|
"https://github.com/docker/buildx-desktop/releases/download/v0.17.1-desktop.1/buildx-v0.17.1-desktop.1.linux-arm-v7",
|
||||||
"https://github.com/docker/buildx-desktop/releases/download/v0.14.1-desktop.1/buildx-v0.14.1-desktop.1.linux-arm-v7.provenance.json",
|
"https://github.com/docker/buildx-desktop/releases/download/v0.17.1-desktop.1/buildx-v0.17.1-desktop.1.linux-arm-v7.provenance.json",
|
||||||
"https://github.com/docker/buildx-desktop/releases/download/v0.14.1-desktop.1/buildx-v0.14.1-desktop.1.linux-arm-v7.sbom.json",
|
"https://github.com/docker/buildx-desktop/releases/download/v0.17.1-desktop.1/buildx-v0.17.1-desktop.1.linux-arm-v7.sbom.json",
|
||||||
"https://github.com/docker/buildx-desktop/releases/download/v0.14.1-desktop.1/buildx-v0.14.1-desktop.1.linux-arm64",
|
"https://github.com/docker/buildx-desktop/releases/download/v0.17.1-desktop.1/buildx-v0.17.1-desktop.1.linux-arm64",
|
||||||
"https://github.com/docker/buildx-desktop/releases/download/v0.14.1-desktop.1/buildx-v0.14.1-desktop.1.linux-arm64.provenance.json",
|
"https://github.com/docker/buildx-desktop/releases/download/v0.17.1-desktop.1/buildx-v0.17.1-desktop.1.linux-arm64.provenance.json",
|
||||||
"https://github.com/docker/buildx-desktop/releases/download/v0.14.1-desktop.1/buildx-v0.14.1-desktop.1.linux-arm64.sbom.json",
|
"https://github.com/docker/buildx-desktop/releases/download/v0.17.1-desktop.1/buildx-v0.17.1-desktop.1.linux-arm64.sbom.json",
|
||||||
"https://github.com/docker/buildx-desktop/releases/download/v0.14.1-desktop.1/buildx-v0.14.1-desktop.1.linux-ppc64le",
|
"https://github.com/docker/buildx-desktop/releases/download/v0.17.1-desktop.1/buildx-v0.17.1-desktop.1.linux-ppc64le",
|
||||||
"https://github.com/docker/buildx-desktop/releases/download/v0.14.1-desktop.1/buildx-v0.14.1-desktop.1.linux-ppc64le.provenance.json",
|
"https://github.com/docker/buildx-desktop/releases/download/v0.17.1-desktop.1/buildx-v0.17.1-desktop.1.linux-ppc64le.provenance.json",
|
||||||
"https://github.com/docker/buildx-desktop/releases/download/v0.14.1-desktop.1/buildx-v0.14.1-desktop.1.linux-ppc64le.sbom.json",
|
"https://github.com/docker/buildx-desktop/releases/download/v0.17.1-desktop.1/buildx-v0.17.1-desktop.1.linux-ppc64le.sbom.json",
|
||||||
"https://github.com/docker/buildx-desktop/releases/download/v0.14.1-desktop.1/buildx-v0.14.1-desktop.1.linux-riscv64",
|
"https://github.com/docker/buildx-desktop/releases/download/v0.17.1-desktop.1/buildx-v0.17.1-desktop.1.linux-riscv64",
|
||||||
"https://github.com/docker/buildx-desktop/releases/download/v0.14.1-desktop.1/buildx-v0.14.1-desktop.1.linux-riscv64.provenance.json",
|
"https://github.com/docker/buildx-desktop/releases/download/v0.17.1-desktop.1/buildx-v0.17.1-desktop.1.linux-riscv64.provenance.json",
|
||||||
"https://github.com/docker/buildx-desktop/releases/download/v0.14.1-desktop.1/buildx-v0.14.1-desktop.1.linux-riscv64.sbom.json",
|
"https://github.com/docker/buildx-desktop/releases/download/v0.17.1-desktop.1/buildx-v0.17.1-desktop.1.linux-riscv64.sbom.json",
|
||||||
"https://github.com/docker/buildx-desktop/releases/download/v0.14.1-desktop.1/buildx-v0.14.1-desktop.1.linux-s390x",
|
"https://github.com/docker/buildx-desktop/releases/download/v0.17.1-desktop.1/buildx-v0.17.1-desktop.1.linux-s390x",
|
||||||
"https://github.com/docker/buildx-desktop/releases/download/v0.14.1-desktop.1/buildx-v0.14.1-desktop.1.linux-s390x.provenance.json",
|
"https://github.com/docker/buildx-desktop/releases/download/v0.17.1-desktop.1/buildx-v0.17.1-desktop.1.linux-s390x.provenance.json",
|
||||||
"https://github.com/docker/buildx-desktop/releases/download/v0.14.1-desktop.1/buildx-v0.14.1-desktop.1.linux-s390x.sbom.json",
|
"https://github.com/docker/buildx-desktop/releases/download/v0.17.1-desktop.1/buildx-v0.17.1-desktop.1.linux-s390x.sbom.json",
|
||||||
"https://github.com/docker/buildx-desktop/releases/download/v0.14.1-desktop.1/buildx-v0.14.1-desktop.1.windows-amd64.exe",
|
"https://github.com/docker/buildx-desktop/releases/download/v0.17.1-desktop.1/buildx-v0.17.1-desktop.1.windows-amd64.exe",
|
||||||
"https://github.com/docker/buildx-desktop/releases/download/v0.14.1-desktop.1/buildx-v0.14.1-desktop.1.windows-amd64.provenance.json",
|
"https://github.com/docker/buildx-desktop/releases/download/v0.17.1-desktop.1/buildx-v0.17.1-desktop.1.windows-amd64.provenance.json",
|
||||||
"https://github.com/docker/buildx-desktop/releases/download/v0.14.1-desktop.1/buildx-v0.14.1-desktop.1.windows-amd64.sbom.json",
|
"https://github.com/docker/buildx-desktop/releases/download/v0.17.1-desktop.1/buildx-v0.17.1-desktop.1.windows-amd64.sbom.json",
|
||||||
"https://github.com/docker/buildx-desktop/releases/download/v0.14.1-desktop.1/buildx-v0.14.1-desktop.1.windows-arm64.exe",
|
"https://github.com/docker/buildx-desktop/releases/download/v0.17.1-desktop.1/buildx-v0.17.1-desktop.1.windows-arm64.exe",
|
||||||
"https://github.com/docker/buildx-desktop/releases/download/v0.14.1-desktop.1/buildx-v0.14.1-desktop.1.windows-arm64.provenance.json",
|
"https://github.com/docker/buildx-desktop/releases/download/v0.17.1-desktop.1/buildx-v0.17.1-desktop.1.windows-arm64.provenance.json",
|
||||||
"https://github.com/docker/buildx-desktop/releases/download/v0.14.1-desktop.1/buildx-v0.14.1-desktop.1.windows-arm64.sbom.json",
|
"https://github.com/docker/buildx-desktop/releases/download/v0.17.1-desktop.1/buildx-v0.17.1-desktop.1.windows-arm64.sbom.json",
|
||||||
"https://github.com/docker/buildx-desktop/releases/download/v0.14.1-desktop.1/checksums.txt"
|
"https://github.com/docker/buildx-desktop/releases/download/v0.17.1-desktop.1/checksums.txt"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"v0.17.1-desktop.1": {
|
||||||
|
"id": 174998914,
|
||||||
|
"tag_name": "v0.17.1-desktop.1",
|
||||||
|
"html_url": "https://github.com/docker/buildx-desktop/releases/tag/v0.17.1-desktop.1",
|
||||||
|
"assets": [
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.17.1-desktop.1/buildx-v0.17.1-desktop.1.darwin-amd64",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.17.1-desktop.1/buildx-v0.17.1-desktop.1.darwin-amd64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.17.1-desktop.1/buildx-v0.17.1-desktop.1.darwin-amd64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.17.1-desktop.1/buildx-v0.17.1-desktop.1.darwin-arm64",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.17.1-desktop.1/buildx-v0.17.1-desktop.1.darwin-arm64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.17.1-desktop.1/buildx-v0.17.1-desktop.1.darwin-arm64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.17.1-desktop.1/buildx-v0.17.1-desktop.1.linux-amd64",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.17.1-desktop.1/buildx-v0.17.1-desktop.1.linux-amd64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.17.1-desktop.1/buildx-v0.17.1-desktop.1.linux-amd64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.17.1-desktop.1/buildx-v0.17.1-desktop.1.linux-arm-v6",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.17.1-desktop.1/buildx-v0.17.1-desktop.1.linux-arm-v6.provenance.json",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.17.1-desktop.1/buildx-v0.17.1-desktop.1.linux-arm-v6.sbom.json",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.17.1-desktop.1/buildx-v0.17.1-desktop.1.linux-arm-v7",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.17.1-desktop.1/buildx-v0.17.1-desktop.1.linux-arm-v7.provenance.json",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.17.1-desktop.1/buildx-v0.17.1-desktop.1.linux-arm-v7.sbom.json",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.17.1-desktop.1/buildx-v0.17.1-desktop.1.linux-arm64",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.17.1-desktop.1/buildx-v0.17.1-desktop.1.linux-arm64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.17.1-desktop.1/buildx-v0.17.1-desktop.1.linux-arm64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.17.1-desktop.1/buildx-v0.17.1-desktop.1.linux-ppc64le",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.17.1-desktop.1/buildx-v0.17.1-desktop.1.linux-ppc64le.provenance.json",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.17.1-desktop.1/buildx-v0.17.1-desktop.1.linux-ppc64le.sbom.json",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.17.1-desktop.1/buildx-v0.17.1-desktop.1.linux-riscv64",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.17.1-desktop.1/buildx-v0.17.1-desktop.1.linux-riscv64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.17.1-desktop.1/buildx-v0.17.1-desktop.1.linux-riscv64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.17.1-desktop.1/buildx-v0.17.1-desktop.1.linux-s390x",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.17.1-desktop.1/buildx-v0.17.1-desktop.1.linux-s390x.provenance.json",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.17.1-desktop.1/buildx-v0.17.1-desktop.1.linux-s390x.sbom.json",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.17.1-desktop.1/buildx-v0.17.1-desktop.1.windows-amd64.exe",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.17.1-desktop.1/buildx-v0.17.1-desktop.1.windows-amd64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.17.1-desktop.1/buildx-v0.17.1-desktop.1.windows-amd64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.17.1-desktop.1/buildx-v0.17.1-desktop.1.windows-arm64.exe",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.17.1-desktop.1/buildx-v0.17.1-desktop.1.windows-arm64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.17.1-desktop.1/buildx-v0.17.1-desktop.1.windows-arm64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.17.1-desktop.1/checksums.txt"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"v0.16.2-desktop.1": {
|
||||||
|
"id": 168239569,
|
||||||
|
"tag_name": "v0.16.2-desktop.1",
|
||||||
|
"html_url": "https://github.com/docker/buildx-desktop/releases/tag/v0.16.2-desktop.1",
|
||||||
|
"assets": [
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.16.2-desktop.1/buildx-v0.16.2-desktop.1.darwin-amd64",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.16.2-desktop.1/buildx-v0.16.2-desktop.1.darwin-amd64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.16.2-desktop.1/buildx-v0.16.2-desktop.1.darwin-amd64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.16.2-desktop.1/buildx-v0.16.2-desktop.1.darwin-arm64",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.16.2-desktop.1/buildx-v0.16.2-desktop.1.darwin-arm64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.16.2-desktop.1/buildx-v0.16.2-desktop.1.darwin-arm64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.16.2-desktop.1/buildx-v0.16.2-desktop.1.linux-amd64",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.16.2-desktop.1/buildx-v0.16.2-desktop.1.linux-amd64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.16.2-desktop.1/buildx-v0.16.2-desktop.1.linux-amd64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.16.2-desktop.1/buildx-v0.16.2-desktop.1.linux-arm-v6",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.16.2-desktop.1/buildx-v0.16.2-desktop.1.linux-arm-v6.provenance.json",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.16.2-desktop.1/buildx-v0.16.2-desktop.1.linux-arm-v6.sbom.json",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.16.2-desktop.1/buildx-v0.16.2-desktop.1.linux-arm-v7",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.16.2-desktop.1/buildx-v0.16.2-desktop.1.linux-arm-v7.provenance.json",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.16.2-desktop.1/buildx-v0.16.2-desktop.1.linux-arm-v7.sbom.json",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.16.2-desktop.1/buildx-v0.16.2-desktop.1.linux-arm64",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.16.2-desktop.1/buildx-v0.16.2-desktop.1.linux-arm64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.16.2-desktop.1/buildx-v0.16.2-desktop.1.linux-arm64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.16.2-desktop.1/buildx-v0.16.2-desktop.1.linux-ppc64le",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.16.2-desktop.1/buildx-v0.16.2-desktop.1.linux-ppc64le.provenance.json",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.16.2-desktop.1/buildx-v0.16.2-desktop.1.linux-ppc64le.sbom.json",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.16.2-desktop.1/buildx-v0.16.2-desktop.1.linux-riscv64",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.16.2-desktop.1/buildx-v0.16.2-desktop.1.linux-riscv64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.16.2-desktop.1/buildx-v0.16.2-desktop.1.linux-riscv64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.16.2-desktop.1/buildx-v0.16.2-desktop.1.linux-s390x",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.16.2-desktop.1/buildx-v0.16.2-desktop.1.linux-s390x.provenance.json",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.16.2-desktop.1/buildx-v0.16.2-desktop.1.linux-s390x.sbom.json",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.16.2-desktop.1/buildx-v0.16.2-desktop.1.windows-amd64.exe",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.16.2-desktop.1/buildx-v0.16.2-desktop.1.windows-amd64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.16.2-desktop.1/buildx-v0.16.2-desktop.1.windows-amd64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.16.2-desktop.1/buildx-v0.16.2-desktop.1.windows-arm64.exe",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.16.2-desktop.1/buildx-v0.16.2-desktop.1.windows-arm64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.16.2-desktop.1/buildx-v0.16.2-desktop.1.windows-arm64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.16.2-desktop.1/checksums.txt"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"v0.15.1-desktop.1": {
|
||||||
|
"id": 161492089,
|
||||||
|
"tag_name": "v0.15.1-desktop.1",
|
||||||
|
"html_url": "https://github.com/docker/buildx-desktop/releases/tag/v0.15.1-desktop.1",
|
||||||
|
"assets": [
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.15.1-desktop.1/buildx-v0.15.1-desktop.1.darwin-amd64",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.15.1-desktop.1/buildx-v0.15.1-desktop.1.darwin-amd64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.15.1-desktop.1/buildx-v0.15.1-desktop.1.darwin-amd64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.15.1-desktop.1/buildx-v0.15.1-desktop.1.darwin-arm64",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.15.1-desktop.1/buildx-v0.15.1-desktop.1.darwin-arm64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.15.1-desktop.1/buildx-v0.15.1-desktop.1.darwin-arm64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.15.1-desktop.1/buildx-v0.15.1-desktop.1.linux-amd64",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.15.1-desktop.1/buildx-v0.15.1-desktop.1.linux-amd64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.15.1-desktop.1/buildx-v0.15.1-desktop.1.linux-amd64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.15.1-desktop.1/buildx-v0.15.1-desktop.1.linux-arm-v6",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.15.1-desktop.1/buildx-v0.15.1-desktop.1.linux-arm-v6.provenance.json",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.15.1-desktop.1/buildx-v0.15.1-desktop.1.linux-arm-v6.sbom.json",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.15.1-desktop.1/buildx-v0.15.1-desktop.1.linux-arm-v7",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.15.1-desktop.1/buildx-v0.15.1-desktop.1.linux-arm-v7.provenance.json",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.15.1-desktop.1/buildx-v0.15.1-desktop.1.linux-arm-v7.sbom.json",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.15.1-desktop.1/buildx-v0.15.1-desktop.1.linux-arm64",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.15.1-desktop.1/buildx-v0.15.1-desktop.1.linux-arm64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.15.1-desktop.1/buildx-v0.15.1-desktop.1.linux-arm64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.15.1-desktop.1/buildx-v0.15.1-desktop.1.linux-ppc64le",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.15.1-desktop.1/buildx-v0.15.1-desktop.1.linux-ppc64le.provenance.json",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.15.1-desktop.1/buildx-v0.15.1-desktop.1.linux-ppc64le.sbom.json",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.15.1-desktop.1/buildx-v0.15.1-desktop.1.linux-riscv64",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.15.1-desktop.1/buildx-v0.15.1-desktop.1.linux-riscv64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.15.1-desktop.1/buildx-v0.15.1-desktop.1.linux-riscv64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.15.1-desktop.1/buildx-v0.15.1-desktop.1.linux-s390x",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.15.1-desktop.1/buildx-v0.15.1-desktop.1.linux-s390x.provenance.json",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.15.1-desktop.1/buildx-v0.15.1-desktop.1.linux-s390x.sbom.json",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.15.1-desktop.1/buildx-v0.15.1-desktop.1.windows-amd64.exe",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.15.1-desktop.1/buildx-v0.15.1-desktop.1.windows-amd64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.15.1-desktop.1/buildx-v0.15.1-desktop.1.windows-amd64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.15.1-desktop.1/buildx-v0.15.1-desktop.1.windows-arm64.exe",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.15.1-desktop.1/buildx-v0.15.1-desktop.1.windows-arm64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.15.1-desktop.1/buildx-v0.15.1-desktop.1.windows-arm64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx-desktop/releases/download/v0.15.1-desktop.1/checksums.txt"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"v0.15.0-desktop.1": {
|
"v0.15.0-desktop.1": {
|
||||||
|
|||||||
484
.github/buildx-releases.json
vendored
484
.github/buildx-releases.json
vendored
@@ -1,43 +1,453 @@
|
|||||||
{
|
{
|
||||||
"latest": {
|
"latest": {
|
||||||
"id": 161126938,
|
"id": 174985224,
|
||||||
"tag_name": "v0.15.1",
|
"tag_name": "v0.17.1",
|
||||||
"html_url": "https://github.com/docker/buildx/releases/tag/v0.15.1",
|
"html_url": "https://github.com/docker/buildx/releases/tag/v0.17.1",
|
||||||
"assets": [
|
"assets": [
|
||||||
"https://github.com/docker/buildx/releases/download/v0.15.1/buildx-v0.15.1.darwin-amd64",
|
"https://github.com/docker/buildx/releases/download/v0.17.1/buildx-v0.17.1.darwin-amd64",
|
||||||
"https://github.com/docker/buildx/releases/download/v0.15.1/buildx-v0.15.1.darwin-amd64.provenance.json",
|
"https://github.com/docker/buildx/releases/download/v0.17.1/buildx-v0.17.1.darwin-amd64.provenance.json",
|
||||||
"https://github.com/docker/buildx/releases/download/v0.15.1/buildx-v0.15.1.darwin-amd64.sbom.json",
|
"https://github.com/docker/buildx/releases/download/v0.17.1/buildx-v0.17.1.darwin-amd64.sbom.json",
|
||||||
"https://github.com/docker/buildx/releases/download/v0.15.1/buildx-v0.15.1.darwin-arm64",
|
"https://github.com/docker/buildx/releases/download/v0.17.1/buildx-v0.17.1.darwin-arm64",
|
||||||
"https://github.com/docker/buildx/releases/download/v0.15.1/buildx-v0.15.1.darwin-arm64.provenance.json",
|
"https://github.com/docker/buildx/releases/download/v0.17.1/buildx-v0.17.1.darwin-arm64.provenance.json",
|
||||||
"https://github.com/docker/buildx/releases/download/v0.15.1/buildx-v0.15.1.darwin-arm64.sbom.json",
|
"https://github.com/docker/buildx/releases/download/v0.17.1/buildx-v0.17.1.darwin-arm64.sbom.json",
|
||||||
"https://github.com/docker/buildx/releases/download/v0.15.1/buildx-v0.15.1.linux-amd64",
|
"https://github.com/docker/buildx/releases/download/v0.17.1/buildx-v0.17.1.linux-amd64",
|
||||||
"https://github.com/docker/buildx/releases/download/v0.15.1/buildx-v0.15.1.linux-amd64.provenance.json",
|
"https://github.com/docker/buildx/releases/download/v0.17.1/buildx-v0.17.1.linux-amd64.provenance.json",
|
||||||
"https://github.com/docker/buildx/releases/download/v0.15.1/buildx-v0.15.1.linux-amd64.sbom.json",
|
"https://github.com/docker/buildx/releases/download/v0.17.1/buildx-v0.17.1.linux-amd64.sbom.json",
|
||||||
"https://github.com/docker/buildx/releases/download/v0.15.1/buildx-v0.15.1.linux-arm-v6",
|
"https://github.com/docker/buildx/releases/download/v0.17.1/buildx-v0.17.1.linux-arm-v6",
|
||||||
"https://github.com/docker/buildx/releases/download/v0.15.1/buildx-v0.15.1.linux-arm-v6.provenance.json",
|
"https://github.com/docker/buildx/releases/download/v0.17.1/buildx-v0.17.1.linux-arm-v6.provenance.json",
|
||||||
"https://github.com/docker/buildx/releases/download/v0.15.1/buildx-v0.15.1.linux-arm-v6.sbom.json",
|
"https://github.com/docker/buildx/releases/download/v0.17.1/buildx-v0.17.1.linux-arm-v6.sbom.json",
|
||||||
"https://github.com/docker/buildx/releases/download/v0.15.1/buildx-v0.15.1.linux-arm-v7",
|
"https://github.com/docker/buildx/releases/download/v0.17.1/buildx-v0.17.1.linux-arm-v7",
|
||||||
"https://github.com/docker/buildx/releases/download/v0.15.1/buildx-v0.15.1.linux-arm-v7.provenance.json",
|
"https://github.com/docker/buildx/releases/download/v0.17.1/buildx-v0.17.1.linux-arm-v7.provenance.json",
|
||||||
"https://github.com/docker/buildx/releases/download/v0.15.1/buildx-v0.15.1.linux-arm-v7.sbom.json",
|
"https://github.com/docker/buildx/releases/download/v0.17.1/buildx-v0.17.1.linux-arm-v7.sbom.json",
|
||||||
"https://github.com/docker/buildx/releases/download/v0.15.1/buildx-v0.15.1.linux-arm64",
|
"https://github.com/docker/buildx/releases/download/v0.17.1/buildx-v0.17.1.linux-arm64",
|
||||||
"https://github.com/docker/buildx/releases/download/v0.15.1/buildx-v0.15.1.linux-arm64.provenance.json",
|
"https://github.com/docker/buildx/releases/download/v0.17.1/buildx-v0.17.1.linux-arm64.provenance.json",
|
||||||
"https://github.com/docker/buildx/releases/download/v0.15.1/buildx-v0.15.1.linux-arm64.sbom.json",
|
"https://github.com/docker/buildx/releases/download/v0.17.1/buildx-v0.17.1.linux-arm64.sbom.json",
|
||||||
"https://github.com/docker/buildx/releases/download/v0.15.1/buildx-v0.15.1.linux-ppc64le",
|
"https://github.com/docker/buildx/releases/download/v0.17.1/buildx-v0.17.1.linux-ppc64le",
|
||||||
"https://github.com/docker/buildx/releases/download/v0.15.1/buildx-v0.15.1.linux-ppc64le.provenance.json",
|
"https://github.com/docker/buildx/releases/download/v0.17.1/buildx-v0.17.1.linux-ppc64le.provenance.json",
|
||||||
"https://github.com/docker/buildx/releases/download/v0.15.1/buildx-v0.15.1.linux-ppc64le.sbom.json",
|
"https://github.com/docker/buildx/releases/download/v0.17.1/buildx-v0.17.1.linux-ppc64le.sbom.json",
|
||||||
"https://github.com/docker/buildx/releases/download/v0.15.1/buildx-v0.15.1.linux-riscv64",
|
"https://github.com/docker/buildx/releases/download/v0.17.1/buildx-v0.17.1.linux-riscv64",
|
||||||
"https://github.com/docker/buildx/releases/download/v0.15.1/buildx-v0.15.1.linux-riscv64.provenance.json",
|
"https://github.com/docker/buildx/releases/download/v0.17.1/buildx-v0.17.1.linux-riscv64.provenance.json",
|
||||||
"https://github.com/docker/buildx/releases/download/v0.15.1/buildx-v0.15.1.linux-riscv64.sbom.json",
|
"https://github.com/docker/buildx/releases/download/v0.17.1/buildx-v0.17.1.linux-riscv64.sbom.json",
|
||||||
"https://github.com/docker/buildx/releases/download/v0.15.1/buildx-v0.15.1.linux-s390x",
|
"https://github.com/docker/buildx/releases/download/v0.17.1/buildx-v0.17.1.linux-s390x",
|
||||||
"https://github.com/docker/buildx/releases/download/v0.15.1/buildx-v0.15.1.linux-s390x.provenance.json",
|
"https://github.com/docker/buildx/releases/download/v0.17.1/buildx-v0.17.1.linux-s390x.provenance.json",
|
||||||
"https://github.com/docker/buildx/releases/download/v0.15.1/buildx-v0.15.1.linux-s390x.sbom.json",
|
"https://github.com/docker/buildx/releases/download/v0.17.1/buildx-v0.17.1.linux-s390x.sbom.json",
|
||||||
"https://github.com/docker/buildx/releases/download/v0.15.1/buildx-v0.15.1.windows-amd64.exe",
|
"https://github.com/docker/buildx/releases/download/v0.17.1/buildx-v0.17.1.windows-amd64.exe",
|
||||||
"https://github.com/docker/buildx/releases/download/v0.15.1/buildx-v0.15.1.windows-amd64.provenance.json",
|
"https://github.com/docker/buildx/releases/download/v0.17.1/buildx-v0.17.1.windows-amd64.provenance.json",
|
||||||
"https://github.com/docker/buildx/releases/download/v0.15.1/buildx-v0.15.1.windows-amd64.sbom.json",
|
"https://github.com/docker/buildx/releases/download/v0.17.1/buildx-v0.17.1.windows-amd64.sbom.json",
|
||||||
"https://github.com/docker/buildx/releases/download/v0.15.1/buildx-v0.15.1.windows-arm64.exe",
|
"https://github.com/docker/buildx/releases/download/v0.17.1/buildx-v0.17.1.windows-arm64.exe",
|
||||||
"https://github.com/docker/buildx/releases/download/v0.15.1/buildx-v0.15.1.windows-arm64.provenance.json",
|
"https://github.com/docker/buildx/releases/download/v0.17.1/buildx-v0.17.1.windows-arm64.provenance.json",
|
||||||
"https://github.com/docker/buildx/releases/download/v0.15.1/buildx-v0.15.1.windows-arm64.sbom.json",
|
"https://github.com/docker/buildx/releases/download/v0.17.1/buildx-v0.17.1.windows-arm64.sbom.json",
|
||||||
"https://github.com/docker/buildx/releases/download/v0.15.1/checksums.txt"
|
"https://github.com/docker/buildx/releases/download/v0.17.1/checksums.txt"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"v0.18.0-rc1": {
|
||||||
|
"id": 179007157,
|
||||||
|
"tag_name": "v0.18.0-rc1",
|
||||||
|
"html_url": "https://github.com/docker/buildx/releases/tag/v0.18.0-rc1",
|
||||||
|
"assets": [
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.18.0-rc1/buildx-v0.18.0-rc1.darwin-amd64",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.18.0-rc1/buildx-v0.18.0-rc1.darwin-amd64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.18.0-rc1/buildx-v0.18.0-rc1.darwin-amd64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.18.0-rc1/buildx-v0.18.0-rc1.darwin-arm64",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.18.0-rc1/buildx-v0.18.0-rc1.darwin-arm64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.18.0-rc1/buildx-v0.18.0-rc1.darwin-arm64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.18.0-rc1/buildx-v0.18.0-rc1.linux-amd64",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.18.0-rc1/buildx-v0.18.0-rc1.linux-amd64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.18.0-rc1/buildx-v0.18.0-rc1.linux-amd64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.18.0-rc1/buildx-v0.18.0-rc1.linux-arm-v6",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.18.0-rc1/buildx-v0.18.0-rc1.linux-arm-v6.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.18.0-rc1/buildx-v0.18.0-rc1.linux-arm-v6.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.18.0-rc1/buildx-v0.18.0-rc1.linux-arm-v7",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.18.0-rc1/buildx-v0.18.0-rc1.linux-arm-v7.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.18.0-rc1/buildx-v0.18.0-rc1.linux-arm-v7.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.18.0-rc1/buildx-v0.18.0-rc1.linux-arm64",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.18.0-rc1/buildx-v0.18.0-rc1.linux-arm64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.18.0-rc1/buildx-v0.18.0-rc1.linux-arm64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.18.0-rc1/buildx-v0.18.0-rc1.linux-ppc64le",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.18.0-rc1/buildx-v0.18.0-rc1.linux-ppc64le.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.18.0-rc1/buildx-v0.18.0-rc1.linux-ppc64le.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.18.0-rc1/buildx-v0.18.0-rc1.linux-riscv64",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.18.0-rc1/buildx-v0.18.0-rc1.linux-riscv64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.18.0-rc1/buildx-v0.18.0-rc1.linux-riscv64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.18.0-rc1/buildx-v0.18.0-rc1.linux-s390x",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.18.0-rc1/buildx-v0.18.0-rc1.linux-s390x.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.18.0-rc1/buildx-v0.18.0-rc1.linux-s390x.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.18.0-rc1/buildx-v0.18.0-rc1.windows-amd64.exe",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.18.0-rc1/buildx-v0.18.0-rc1.windows-amd64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.18.0-rc1/buildx-v0.18.0-rc1.windows-amd64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.18.0-rc1/buildx-v0.18.0-rc1.windows-arm64.exe",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.18.0-rc1/buildx-v0.18.0-rc1.windows-arm64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.18.0-rc1/buildx-v0.18.0-rc1.windows-arm64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.18.0-rc1/checksums.txt"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"v0.17.1": {
|
||||||
|
"id": 174985224,
|
||||||
|
"tag_name": "v0.17.1",
|
||||||
|
"html_url": "https://github.com/docker/buildx/releases/tag/v0.17.1",
|
||||||
|
"assets": [
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.17.1/buildx-v0.17.1.darwin-amd64",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.17.1/buildx-v0.17.1.darwin-amd64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.17.1/buildx-v0.17.1.darwin-amd64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.17.1/buildx-v0.17.1.darwin-arm64",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.17.1/buildx-v0.17.1.darwin-arm64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.17.1/buildx-v0.17.1.darwin-arm64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.17.1/buildx-v0.17.1.linux-amd64",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.17.1/buildx-v0.17.1.linux-amd64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.17.1/buildx-v0.17.1.linux-amd64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.17.1/buildx-v0.17.1.linux-arm-v6",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.17.1/buildx-v0.17.1.linux-arm-v6.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.17.1/buildx-v0.17.1.linux-arm-v6.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.17.1/buildx-v0.17.1.linux-arm-v7",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.17.1/buildx-v0.17.1.linux-arm-v7.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.17.1/buildx-v0.17.1.linux-arm-v7.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.17.1/buildx-v0.17.1.linux-arm64",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.17.1/buildx-v0.17.1.linux-arm64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.17.1/buildx-v0.17.1.linux-arm64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.17.1/buildx-v0.17.1.linux-ppc64le",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.17.1/buildx-v0.17.1.linux-ppc64le.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.17.1/buildx-v0.17.1.linux-ppc64le.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.17.1/buildx-v0.17.1.linux-riscv64",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.17.1/buildx-v0.17.1.linux-riscv64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.17.1/buildx-v0.17.1.linux-riscv64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.17.1/buildx-v0.17.1.linux-s390x",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.17.1/buildx-v0.17.1.linux-s390x.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.17.1/buildx-v0.17.1.linux-s390x.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.17.1/buildx-v0.17.1.windows-amd64.exe",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.17.1/buildx-v0.17.1.windows-amd64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.17.1/buildx-v0.17.1.windows-amd64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.17.1/buildx-v0.17.1.windows-arm64.exe",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.17.1/buildx-v0.17.1.windows-arm64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.17.1/buildx-v0.17.1.windows-arm64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.17.1/checksums.txt"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"v0.17.0": {
|
||||||
|
"id": 174385492,
|
||||||
|
"tag_name": "v0.17.0",
|
||||||
|
"html_url": "https://github.com/docker/buildx/releases/tag/v0.17.0",
|
||||||
|
"assets": [
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.17.0/buildx-v0.17.0.darwin-amd64",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.17.0/buildx-v0.17.0.darwin-amd64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.17.0/buildx-v0.17.0.darwin-amd64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.17.0/buildx-v0.17.0.darwin-arm64",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.17.0/buildx-v0.17.0.darwin-arm64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.17.0/buildx-v0.17.0.darwin-arm64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.17.0/buildx-v0.17.0.linux-amd64",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.17.0/buildx-v0.17.0.linux-amd64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.17.0/buildx-v0.17.0.linux-amd64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.17.0/buildx-v0.17.0.linux-arm-v6",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.17.0/buildx-v0.17.0.linux-arm-v6.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.17.0/buildx-v0.17.0.linux-arm-v6.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.17.0/buildx-v0.17.0.linux-arm-v7",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.17.0/buildx-v0.17.0.linux-arm-v7.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.17.0/buildx-v0.17.0.linux-arm-v7.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.17.0/buildx-v0.17.0.linux-arm64",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.17.0/buildx-v0.17.0.linux-arm64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.17.0/buildx-v0.17.0.linux-arm64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.17.0/buildx-v0.17.0.linux-ppc64le",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.17.0/buildx-v0.17.0.linux-ppc64le.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.17.0/buildx-v0.17.0.linux-ppc64le.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.17.0/buildx-v0.17.0.linux-riscv64",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.17.0/buildx-v0.17.0.linux-riscv64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.17.0/buildx-v0.17.0.linux-riscv64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.17.0/buildx-v0.17.0.linux-s390x",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.17.0/buildx-v0.17.0.linux-s390x.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.17.0/buildx-v0.17.0.linux-s390x.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.17.0/buildx-v0.17.0.windows-amd64.exe",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.17.0/buildx-v0.17.0.windows-amd64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.17.0/buildx-v0.17.0.windows-amd64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.17.0/buildx-v0.17.0.windows-arm64.exe",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.17.0/buildx-v0.17.0.windows-arm64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.17.0/buildx-v0.17.0.windows-arm64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.17.0/checksums.txt"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"v0.17.0-rc2": {
|
||||||
|
"id": 174230520,
|
||||||
|
"tag_name": "v0.17.0-rc2",
|
||||||
|
"html_url": "https://github.com/docker/buildx/releases/tag/v0.17.0-rc2",
|
||||||
|
"assets": [
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.17.0-rc2/buildx-v0.17.0-rc2.darwin-amd64",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.17.0-rc2/buildx-v0.17.0-rc2.darwin-amd64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.17.0-rc2/buildx-v0.17.0-rc2.darwin-amd64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.17.0-rc2/buildx-v0.17.0-rc2.darwin-arm64",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.17.0-rc2/buildx-v0.17.0-rc2.darwin-arm64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.17.0-rc2/buildx-v0.17.0-rc2.darwin-arm64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.17.0-rc2/buildx-v0.17.0-rc2.linux-amd64",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.17.0-rc2/buildx-v0.17.0-rc2.linux-amd64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.17.0-rc2/buildx-v0.17.0-rc2.linux-amd64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.17.0-rc2/buildx-v0.17.0-rc2.linux-arm-v6",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.17.0-rc2/buildx-v0.17.0-rc2.linux-arm-v6.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.17.0-rc2/buildx-v0.17.0-rc2.linux-arm-v6.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.17.0-rc2/buildx-v0.17.0-rc2.linux-arm-v7",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.17.0-rc2/buildx-v0.17.0-rc2.linux-arm-v7.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.17.0-rc2/buildx-v0.17.0-rc2.linux-arm-v7.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.17.0-rc2/buildx-v0.17.0-rc2.linux-arm64",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.17.0-rc2/buildx-v0.17.0-rc2.linux-arm64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.17.0-rc2/buildx-v0.17.0-rc2.linux-arm64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.17.0-rc2/buildx-v0.17.0-rc2.linux-ppc64le",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.17.0-rc2/buildx-v0.17.0-rc2.linux-ppc64le.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.17.0-rc2/buildx-v0.17.0-rc2.linux-ppc64le.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.17.0-rc2/buildx-v0.17.0-rc2.linux-riscv64",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.17.0-rc2/buildx-v0.17.0-rc2.linux-riscv64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.17.0-rc2/buildx-v0.17.0-rc2.linux-riscv64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.17.0-rc2/buildx-v0.17.0-rc2.linux-s390x",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.17.0-rc2/buildx-v0.17.0-rc2.linux-s390x.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.17.0-rc2/buildx-v0.17.0-rc2.linux-s390x.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.17.0-rc2/buildx-v0.17.0-rc2.windows-amd64.exe",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.17.0-rc2/buildx-v0.17.0-rc2.windows-amd64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.17.0-rc2/buildx-v0.17.0-rc2.windows-amd64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.17.0-rc2/buildx-v0.17.0-rc2.windows-arm64.exe",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.17.0-rc2/buildx-v0.17.0-rc2.windows-arm64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.17.0-rc2/buildx-v0.17.0-rc2.windows-arm64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.17.0-rc2/checksums.txt"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"v0.17.0-rc1": {
|
||||||
|
"id": 173583122,
|
||||||
|
"tag_name": "v0.17.0-rc1",
|
||||||
|
"html_url": "https://github.com/docker/buildx/releases/tag/v0.17.0-rc1",
|
||||||
|
"assets": [
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.17.0-rc1/buildx-v0.17.0-rc1.darwin-amd64",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.17.0-rc1/buildx-v0.17.0-rc1.darwin-amd64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.17.0-rc1/buildx-v0.17.0-rc1.darwin-amd64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.17.0-rc1/buildx-v0.17.0-rc1.darwin-arm64",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.17.0-rc1/buildx-v0.17.0-rc1.darwin-arm64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.17.0-rc1/buildx-v0.17.0-rc1.darwin-arm64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.17.0-rc1/buildx-v0.17.0-rc1.linux-amd64",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.17.0-rc1/buildx-v0.17.0-rc1.linux-amd64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.17.0-rc1/buildx-v0.17.0-rc1.linux-amd64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.17.0-rc1/buildx-v0.17.0-rc1.linux-arm-v6",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.17.0-rc1/buildx-v0.17.0-rc1.linux-arm-v6.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.17.0-rc1/buildx-v0.17.0-rc1.linux-arm-v6.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.17.0-rc1/buildx-v0.17.0-rc1.linux-arm-v7",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.17.0-rc1/buildx-v0.17.0-rc1.linux-arm-v7.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.17.0-rc1/buildx-v0.17.0-rc1.linux-arm-v7.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.17.0-rc1/buildx-v0.17.0-rc1.linux-arm64",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.17.0-rc1/buildx-v0.17.0-rc1.linux-arm64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.17.0-rc1/buildx-v0.17.0-rc1.linux-arm64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.17.0-rc1/buildx-v0.17.0-rc1.linux-ppc64le",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.17.0-rc1/buildx-v0.17.0-rc1.linux-ppc64le.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.17.0-rc1/buildx-v0.17.0-rc1.linux-ppc64le.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.17.0-rc1/buildx-v0.17.0-rc1.linux-riscv64",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.17.0-rc1/buildx-v0.17.0-rc1.linux-riscv64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.17.0-rc1/buildx-v0.17.0-rc1.linux-riscv64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.17.0-rc1/buildx-v0.17.0-rc1.linux-s390x",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.17.0-rc1/buildx-v0.17.0-rc1.linux-s390x.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.17.0-rc1/buildx-v0.17.0-rc1.linux-s390x.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.17.0-rc1/buildx-v0.17.0-rc1.windows-amd64.exe",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.17.0-rc1/buildx-v0.17.0-rc1.windows-amd64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.17.0-rc1/buildx-v0.17.0-rc1.windows-amd64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.17.0-rc1/buildx-v0.17.0-rc1.windows-arm64.exe",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.17.0-rc1/buildx-v0.17.0-rc1.windows-arm64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.17.0-rc1/buildx-v0.17.0-rc1.windows-arm64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.17.0-rc1/checksums.txt"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"v0.16.2": {
|
||||||
|
"id": 167152950,
|
||||||
|
"tag_name": "v0.16.2",
|
||||||
|
"html_url": "https://github.com/docker/buildx/releases/tag/v0.16.2",
|
||||||
|
"assets": [
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.16.2/buildx-v0.16.2.darwin-amd64",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.16.2/buildx-v0.16.2.darwin-amd64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.16.2/buildx-v0.16.2.darwin-amd64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.16.2/buildx-v0.16.2.darwin-arm64",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.16.2/buildx-v0.16.2.darwin-arm64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.16.2/buildx-v0.16.2.darwin-arm64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.16.2/buildx-v0.16.2.linux-amd64",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.16.2/buildx-v0.16.2.linux-amd64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.16.2/buildx-v0.16.2.linux-amd64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.16.2/buildx-v0.16.2.linux-arm-v6",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.16.2/buildx-v0.16.2.linux-arm-v6.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.16.2/buildx-v0.16.2.linux-arm-v6.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.16.2/buildx-v0.16.2.linux-arm-v7",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.16.2/buildx-v0.16.2.linux-arm-v7.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.16.2/buildx-v0.16.2.linux-arm-v7.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.16.2/buildx-v0.16.2.linux-arm64",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.16.2/buildx-v0.16.2.linux-arm64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.16.2/buildx-v0.16.2.linux-arm64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.16.2/buildx-v0.16.2.linux-ppc64le",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.16.2/buildx-v0.16.2.linux-ppc64le.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.16.2/buildx-v0.16.2.linux-ppc64le.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.16.2/buildx-v0.16.2.linux-riscv64",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.16.2/buildx-v0.16.2.linux-riscv64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.16.2/buildx-v0.16.2.linux-riscv64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.16.2/buildx-v0.16.2.linux-s390x",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.16.2/buildx-v0.16.2.linux-s390x.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.16.2/buildx-v0.16.2.linux-s390x.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.16.2/buildx-v0.16.2.windows-amd64.exe",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.16.2/buildx-v0.16.2.windows-amd64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.16.2/buildx-v0.16.2.windows-amd64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.16.2/buildx-v0.16.2.windows-arm64.exe",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.16.2/buildx-v0.16.2.windows-arm64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.16.2/buildx-v0.16.2.windows-arm64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.16.2/checksums.txt"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"v0.16.1": {
|
||||||
|
"id": 166111587,
|
||||||
|
"tag_name": "v0.16.1",
|
||||||
|
"html_url": "https://github.com/docker/buildx/releases/tag/v0.16.1",
|
||||||
|
"assets": [
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.16.1/buildx-v0.16.1.darwin-amd64",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.16.1/buildx-v0.16.1.darwin-amd64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.16.1/buildx-v0.16.1.darwin-amd64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.16.1/buildx-v0.16.1.darwin-arm64",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.16.1/buildx-v0.16.1.darwin-arm64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.16.1/buildx-v0.16.1.darwin-arm64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.16.1/buildx-v0.16.1.linux-amd64",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.16.1/buildx-v0.16.1.linux-amd64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.16.1/buildx-v0.16.1.linux-amd64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.16.1/buildx-v0.16.1.linux-arm-v6",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.16.1/buildx-v0.16.1.linux-arm-v6.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.16.1/buildx-v0.16.1.linux-arm-v6.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.16.1/buildx-v0.16.1.linux-arm-v7",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.16.1/buildx-v0.16.1.linux-arm-v7.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.16.1/buildx-v0.16.1.linux-arm-v7.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.16.1/buildx-v0.16.1.linux-arm64",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.16.1/buildx-v0.16.1.linux-arm64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.16.1/buildx-v0.16.1.linux-arm64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.16.1/buildx-v0.16.1.linux-ppc64le",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.16.1/buildx-v0.16.1.linux-ppc64le.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.16.1/buildx-v0.16.1.linux-ppc64le.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.16.1/buildx-v0.16.1.linux-riscv64",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.16.1/buildx-v0.16.1.linux-riscv64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.16.1/buildx-v0.16.1.linux-riscv64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.16.1/buildx-v0.16.1.linux-s390x",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.16.1/buildx-v0.16.1.linux-s390x.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.16.1/buildx-v0.16.1.linux-s390x.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.16.1/buildx-v0.16.1.windows-amd64.exe",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.16.1/buildx-v0.16.1.windows-amd64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.16.1/buildx-v0.16.1.windows-amd64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.16.1/buildx-v0.16.1.windows-arm64.exe",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.16.1/buildx-v0.16.1.windows-arm64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.16.1/buildx-v0.16.1.windows-arm64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.16.1/checksums.txt"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"v0.16.0": {
|
||||||
|
"id": 165067169,
|
||||||
|
"tag_name": "v0.16.0",
|
||||||
|
"html_url": "https://github.com/docker/buildx/releases/tag/v0.16.0",
|
||||||
|
"assets": [
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.16.0/buildx-v0.16.0.darwin-amd64",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.16.0/buildx-v0.16.0.darwin-amd64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.16.0/buildx-v0.16.0.darwin-amd64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.16.0/buildx-v0.16.0.darwin-arm64",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.16.0/buildx-v0.16.0.darwin-arm64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.16.0/buildx-v0.16.0.darwin-arm64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.16.0/buildx-v0.16.0.linux-amd64",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.16.0/buildx-v0.16.0.linux-amd64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.16.0/buildx-v0.16.0.linux-amd64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.16.0/buildx-v0.16.0.linux-arm-v6",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.16.0/buildx-v0.16.0.linux-arm-v6.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.16.0/buildx-v0.16.0.linux-arm-v6.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.16.0/buildx-v0.16.0.linux-arm-v7",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.16.0/buildx-v0.16.0.linux-arm-v7.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.16.0/buildx-v0.16.0.linux-arm-v7.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.16.0/buildx-v0.16.0.linux-arm64",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.16.0/buildx-v0.16.0.linux-arm64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.16.0/buildx-v0.16.0.linux-arm64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.16.0/buildx-v0.16.0.linux-ppc64le",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.16.0/buildx-v0.16.0.linux-ppc64le.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.16.0/buildx-v0.16.0.linux-ppc64le.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.16.0/buildx-v0.16.0.linux-riscv64",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.16.0/buildx-v0.16.0.linux-riscv64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.16.0/buildx-v0.16.0.linux-riscv64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.16.0/buildx-v0.16.0.linux-s390x",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.16.0/buildx-v0.16.0.linux-s390x.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.16.0/buildx-v0.16.0.linux-s390x.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.16.0/buildx-v0.16.0.windows-amd64.exe",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.16.0/buildx-v0.16.0.windows-amd64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.16.0/buildx-v0.16.0.windows-amd64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.16.0/buildx-v0.16.0.windows-arm64.exe",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.16.0/buildx-v0.16.0.windows-arm64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.16.0/buildx-v0.16.0.windows-arm64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.16.0/checksums.txt"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"v0.16.0-rc2": {
|
||||||
|
"id": 164893757,
|
||||||
|
"tag_name": "v0.16.0-rc2",
|
||||||
|
"html_url": "https://github.com/docker/buildx/releases/tag/v0.16.0-rc2",
|
||||||
|
"assets": [
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.16.0-rc2/buildx-v0.16.0-rc2.darwin-amd64",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.16.0-rc2/buildx-v0.16.0-rc2.darwin-amd64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.16.0-rc2/buildx-v0.16.0-rc2.darwin-amd64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.16.0-rc2/buildx-v0.16.0-rc2.darwin-arm64",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.16.0-rc2/buildx-v0.16.0-rc2.darwin-arm64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.16.0-rc2/buildx-v0.16.0-rc2.darwin-arm64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.16.0-rc2/buildx-v0.16.0-rc2.linux-amd64",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.16.0-rc2/buildx-v0.16.0-rc2.linux-amd64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.16.0-rc2/buildx-v0.16.0-rc2.linux-amd64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.16.0-rc2/buildx-v0.16.0-rc2.linux-arm-v6",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.16.0-rc2/buildx-v0.16.0-rc2.linux-arm-v6.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.16.0-rc2/buildx-v0.16.0-rc2.linux-arm-v6.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.16.0-rc2/buildx-v0.16.0-rc2.linux-arm-v7",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.16.0-rc2/buildx-v0.16.0-rc2.linux-arm-v7.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.16.0-rc2/buildx-v0.16.0-rc2.linux-arm-v7.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.16.0-rc2/buildx-v0.16.0-rc2.linux-arm64",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.16.0-rc2/buildx-v0.16.0-rc2.linux-arm64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.16.0-rc2/buildx-v0.16.0-rc2.linux-arm64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.16.0-rc2/buildx-v0.16.0-rc2.linux-ppc64le",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.16.0-rc2/buildx-v0.16.0-rc2.linux-ppc64le.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.16.0-rc2/buildx-v0.16.0-rc2.linux-ppc64le.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.16.0-rc2/buildx-v0.16.0-rc2.linux-riscv64",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.16.0-rc2/buildx-v0.16.0-rc2.linux-riscv64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.16.0-rc2/buildx-v0.16.0-rc2.linux-riscv64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.16.0-rc2/buildx-v0.16.0-rc2.linux-s390x",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.16.0-rc2/buildx-v0.16.0-rc2.linux-s390x.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.16.0-rc2/buildx-v0.16.0-rc2.linux-s390x.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.16.0-rc2/buildx-v0.16.0-rc2.windows-amd64.exe",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.16.0-rc2/buildx-v0.16.0-rc2.windows-amd64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.16.0-rc2/buildx-v0.16.0-rc2.windows-amd64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.16.0-rc2/buildx-v0.16.0-rc2.windows-arm64.exe",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.16.0-rc2/buildx-v0.16.0-rc2.windows-arm64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.16.0-rc2/buildx-v0.16.0-rc2.windows-arm64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.16.0-rc2/checksums.txt"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"v0.16.0-rc1": {
|
||||||
|
"id": 163887606,
|
||||||
|
"tag_name": "v0.16.0-rc1",
|
||||||
|
"html_url": "https://github.com/docker/buildx/releases/tag/v0.16.0-rc1",
|
||||||
|
"assets": [
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.16.0-rc1/buildx-v0.16.0-rc1.darwin-amd64",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.16.0-rc1/buildx-v0.16.0-rc1.darwin-amd64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.16.0-rc1/buildx-v0.16.0-rc1.darwin-amd64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.16.0-rc1/buildx-v0.16.0-rc1.darwin-arm64",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.16.0-rc1/buildx-v0.16.0-rc1.darwin-arm64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.16.0-rc1/buildx-v0.16.0-rc1.darwin-arm64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.16.0-rc1/buildx-v0.16.0-rc1.linux-amd64",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.16.0-rc1/buildx-v0.16.0-rc1.linux-amd64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.16.0-rc1/buildx-v0.16.0-rc1.linux-amd64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.16.0-rc1/buildx-v0.16.0-rc1.linux-arm-v6",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.16.0-rc1/buildx-v0.16.0-rc1.linux-arm-v6.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.16.0-rc1/buildx-v0.16.0-rc1.linux-arm-v6.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.16.0-rc1/buildx-v0.16.0-rc1.linux-arm-v7",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.16.0-rc1/buildx-v0.16.0-rc1.linux-arm-v7.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.16.0-rc1/buildx-v0.16.0-rc1.linux-arm-v7.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.16.0-rc1/buildx-v0.16.0-rc1.linux-arm64",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.16.0-rc1/buildx-v0.16.0-rc1.linux-arm64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.16.0-rc1/buildx-v0.16.0-rc1.linux-arm64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.16.0-rc1/buildx-v0.16.0-rc1.linux-ppc64le",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.16.0-rc1/buildx-v0.16.0-rc1.linux-ppc64le.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.16.0-rc1/buildx-v0.16.0-rc1.linux-ppc64le.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.16.0-rc1/buildx-v0.16.0-rc1.linux-riscv64",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.16.0-rc1/buildx-v0.16.0-rc1.linux-riscv64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.16.0-rc1/buildx-v0.16.0-rc1.linux-riscv64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.16.0-rc1/buildx-v0.16.0-rc1.linux-s390x",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.16.0-rc1/buildx-v0.16.0-rc1.linux-s390x.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.16.0-rc1/buildx-v0.16.0-rc1.linux-s390x.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.16.0-rc1/buildx-v0.16.0-rc1.windows-amd64.exe",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.16.0-rc1/buildx-v0.16.0-rc1.windows-amd64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.16.0-rc1/buildx-v0.16.0-rc1.windows-amd64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.16.0-rc1/buildx-v0.16.0-rc1.windows-arm64.exe",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.16.0-rc1/buildx-v0.16.0-rc1.windows-arm64.provenance.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.16.0-rc1/buildx-v0.16.0-rc1.windows-arm64.sbom.json",
|
||||||
|
"https://github.com/docker/buildx/releases/download/v0.16.0-rc1/checksums.txt"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"v0.15.1": {
|
"v0.15.1": {
|
||||||
|
|||||||
120
.github/docker-releases.json
vendored
120
.github/docker-releases.json
vendored
@@ -1,8 +1,122 @@
|
|||||||
{
|
{
|
||||||
"latest": {
|
"latest": {
|
||||||
"id": 159031384,
|
"id": 176167883,
|
||||||
"tag_name": "v26.1.4",
|
"tag_name": "v27.3.1",
|
||||||
"html_url": "https://github.com/moby/moby/releases/tag/v26.1.4",
|
"html_url": "https://github.com/moby/moby/releases/tag/v27.3.1",
|
||||||
|
"assets": []
|
||||||
|
},
|
||||||
|
"v23.0.15": {
|
||||||
|
"id": 178729348,
|
||||||
|
"tag_name": "v23.0.15",
|
||||||
|
"html_url": "https://github.com/moby/moby/releases/tag/v23.0.15",
|
||||||
|
"assets": []
|
||||||
|
},
|
||||||
|
"v27.3.1": {
|
||||||
|
"id": 176167883,
|
||||||
|
"tag_name": "v27.3.1",
|
||||||
|
"html_url": "https://github.com/moby/moby/releases/tag/v27.3.1",
|
||||||
|
"assets": []
|
||||||
|
},
|
||||||
|
"v27.3.0": {
|
||||||
|
"id": 175978619,
|
||||||
|
"tag_name": "v27.3.0",
|
||||||
|
"html_url": "https://github.com/moby/moby/releases/tag/v27.3.0",
|
||||||
|
"assets": []
|
||||||
|
},
|
||||||
|
"v27.3.0-rc.2": {
|
||||||
|
"id": 175668160,
|
||||||
|
"tag_name": "v27.3.0-rc.2",
|
||||||
|
"html_url": "https://github.com/moby/moby/releases/tag/v27.3.0-rc.2",
|
||||||
|
"assets": []
|
||||||
|
},
|
||||||
|
"v27.3.0-rc.1": {
|
||||||
|
"id": 174993113,
|
||||||
|
"tag_name": "v27.3.0-rc.1",
|
||||||
|
"html_url": "https://github.com/moby/moby/releases/tag/v27.3.0-rc.1",
|
||||||
|
"assets": []
|
||||||
|
},
|
||||||
|
"v27.2.1": {
|
||||||
|
"id": 173107018,
|
||||||
|
"tag_name": "v27.2.1",
|
||||||
|
"html_url": "https://github.com/moby/moby/releases/tag/v27.2.1",
|
||||||
|
"assets": []
|
||||||
|
},
|
||||||
|
"v27.2.0": {
|
||||||
|
"id": 171953411,
|
||||||
|
"tag_name": "v27.2.0",
|
||||||
|
"html_url": "https://github.com/moby/moby/releases/tag/v27.2.0",
|
||||||
|
"assets": []
|
||||||
|
},
|
||||||
|
"v23.0.14": {
|
||||||
|
"id": 170923310,
|
||||||
|
"tag_name": "v23.0.14",
|
||||||
|
"html_url": "https://github.com/moby/moby/releases/tag/v23.0.14",
|
||||||
|
"assets": []
|
||||||
|
},
|
||||||
|
"v27.2.0-rc.1": {
|
||||||
|
"id": 170583738,
|
||||||
|
"tag_name": "v27.2.0-rc.1",
|
||||||
|
"html_url": "https://github.com/moby/moby/releases/tag/v27.2.0-rc.1",
|
||||||
|
"assets": []
|
||||||
|
},
|
||||||
|
"v27.1.2": {
|
||||||
|
"id": 169473565,
|
||||||
|
"tag_name": "v27.1.2",
|
||||||
|
"html_url": "https://github.com/moby/moby/releases/tag/v27.1.2",
|
||||||
|
"assets": []
|
||||||
|
},
|
||||||
|
"v25.0.6": {
|
||||||
|
"id": 167195013,
|
||||||
|
"tag_name": "v25.0.6",
|
||||||
|
"html_url": "https://github.com/moby/moby/releases/tag/v25.0.6",
|
||||||
|
"assets": []
|
||||||
|
},
|
||||||
|
"v27.1.1": {
|
||||||
|
"id": 166797236,
|
||||||
|
"tag_name": "v27.1.1",
|
||||||
|
"html_url": "https://github.com/moby/moby/releases/tag/v27.1.1",
|
||||||
|
"assets": []
|
||||||
|
},
|
||||||
|
"v26.1.5": {
|
||||||
|
"id": 166954867,
|
||||||
|
"tag_name": "v26.1.5",
|
||||||
|
"html_url": "https://github.com/moby/moby/releases/tag/v26.1.5",
|
||||||
|
"assets": []
|
||||||
|
},
|
||||||
|
"v27.1.0": {
|
||||||
|
"id": 166495917,
|
||||||
|
"tag_name": "v27.1.0",
|
||||||
|
"html_url": "https://github.com/moby/moby/releases/tag/v27.1.0",
|
||||||
|
"assets": []
|
||||||
|
},
|
||||||
|
"v27.0.3": {
|
||||||
|
"id": 163311279,
|
||||||
|
"tag_name": "v27.0.3",
|
||||||
|
"html_url": "https://github.com/moby/moby/releases/tag/v27.0.3",
|
||||||
|
"assets": []
|
||||||
|
},
|
||||||
|
"v27.0.2": {
|
||||||
|
"id": 162600493,
|
||||||
|
"tag_name": "v27.0.2",
|
||||||
|
"html_url": "https://github.com/moby/moby/releases/tag/v27.0.2",
|
||||||
|
"assets": []
|
||||||
|
},
|
||||||
|
"v27.0.1": {
|
||||||
|
"id": 162009909,
|
||||||
|
"tag_name": "v27.0.1",
|
||||||
|
"html_url": "https://github.com/moby/moby/releases/tag/v27.0.1",
|
||||||
|
"assets": []
|
||||||
|
},
|
||||||
|
"v27.0.1-rc.1": {
|
||||||
|
"id": 161457618,
|
||||||
|
"tag_name": "v27.0.1-rc.1",
|
||||||
|
"html_url": "https://github.com/moby/moby/releases/tag/v27.0.1-rc.1",
|
||||||
|
"assets": []
|
||||||
|
},
|
||||||
|
"v23.0.13": {
|
||||||
|
"id": 161533551,
|
||||||
|
"tag_name": "v23.0.13",
|
||||||
|
"html_url": "https://github.com/moby/moby/releases/tag/v23.0.13",
|
||||||
"assets": []
|
"assets": []
|
||||||
},
|
},
|
||||||
"v27.0.0-rc.2": {
|
"v27.0.0-rc.2": {
|
||||||
|
|||||||
@@ -12,8 +12,8 @@ on:
|
|||||||
branches:
|
branches:
|
||||||
- 'main'
|
- 'main'
|
||||||
pull_request:
|
pull_request:
|
||||||
paths-ignore:
|
paths:
|
||||||
- '.github/*-releases.json'
|
- '.github/workflows/buildx-lab-releases-json.yml'
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
generate:
|
generate:
|
||||||
@@ -45,7 +45,7 @@ jobs:
|
|||||||
git add -A .
|
git add -A .
|
||||||
-
|
-
|
||||||
name: Create PR
|
name: Create PR
|
||||||
uses: peter-evans/create-pull-request@c5a7806660adbe173f04e3e038b0ccdcd758773c # v6.1.0
|
uses: peter-evans/create-pull-request@5e914681df9dc83aa4e4905692ca88beb2f9e91f # v7.0.5
|
||||||
with:
|
with:
|
||||||
base: main
|
base: main
|
||||||
branch: bot/buildx-lab-releases-json
|
branch: bot/buildx-lab-releases-json
|
||||||
|
|||||||
6
.github/workflows/buildx-releases-json.yml
vendored
6
.github/workflows/buildx-releases-json.yml
vendored
@@ -12,8 +12,8 @@ on:
|
|||||||
branches:
|
branches:
|
||||||
- 'main'
|
- 'main'
|
||||||
pull_request:
|
pull_request:
|
||||||
paths-ignore:
|
paths:
|
||||||
- '.github/*-releases.json'
|
- '.github/workflows/buildx-releases-json.yml'
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
generate:
|
generate:
|
||||||
@@ -45,7 +45,7 @@ jobs:
|
|||||||
git add -A .
|
git add -A .
|
||||||
-
|
-
|
||||||
name: Create PR
|
name: Create PR
|
||||||
uses: peter-evans/create-pull-request@c5a7806660adbe173f04e3e038b0ccdcd758773c # v6.1.0
|
uses: peter-evans/create-pull-request@5e914681df9dc83aa4e4905692ca88beb2f9e91f # v7.0.5
|
||||||
with:
|
with:
|
||||||
base: main
|
base: main
|
||||||
branch: bot/buildx-releases-json
|
branch: bot/buildx-releases-json
|
||||||
|
|||||||
6
.github/workflows/docker-releases-json.yml
vendored
6
.github/workflows/docker-releases-json.yml
vendored
@@ -12,8 +12,8 @@ on:
|
|||||||
branches:
|
branches:
|
||||||
- 'main'
|
- 'main'
|
||||||
pull_request:
|
pull_request:
|
||||||
paths-ignore:
|
paths:
|
||||||
- '.github/*-releases.json'
|
- '.github/workflows/docker-releases-json.yml'
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
generate:
|
generate:
|
||||||
@@ -45,7 +45,7 @@ jobs:
|
|||||||
git add -A .
|
git add -A .
|
||||||
-
|
-
|
||||||
name: Create PR
|
name: Create PR
|
||||||
uses: peter-evans/create-pull-request@c5a7806660adbe173f04e3e038b0ccdcd758773c # v6.1.0
|
uses: peter-evans/create-pull-request@5e914681df9dc83aa4e4905692ca88beb2f9e91f # v7.0.5
|
||||||
with:
|
with:
|
||||||
base: main
|
base: main
|
||||||
branch: bot/docker-releases-json
|
branch: bot/docker-releases-json
|
||||||
|
|||||||
8
.github/workflows/test.yml
vendored
8
.github/workflows/test.yml
vendored
@@ -15,7 +15,8 @@ on:
|
|||||||
|
|
||||||
env:
|
env:
|
||||||
NODE_VERSION: "20"
|
NODE_VERSION: "20"
|
||||||
BUILDX_VERSION: "v0.15.1"
|
BUILDX_VERSION: "v0.17.1"
|
||||||
|
BUILDKIT_IMAGE: "moby/buildkit:v0.16.0"
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
test:
|
test:
|
||||||
@@ -118,6 +119,10 @@ jobs:
|
|||||||
run: |
|
run: |
|
||||||
corepack enable
|
corepack enable
|
||||||
yarn --version
|
yarn --version
|
||||||
|
-
|
||||||
|
name: Set up QEMU
|
||||||
|
if: startsWith(matrix.os, 'macos')
|
||||||
|
uses: ./.github/actions/macos-setup-qemu
|
||||||
-
|
-
|
||||||
name: Setup Node
|
name: Setup Node
|
||||||
uses: actions/setup-node@v4
|
uses: actions/setup-node@v4
|
||||||
@@ -138,6 +143,7 @@ jobs:
|
|||||||
uses: docker/setup-buildx-action@v3
|
uses: docker/setup-buildx-action@v3
|
||||||
with:
|
with:
|
||||||
version: ${{ env.BUILDX_VERSION }}
|
version: ${{ env.BUILDX_VERSION }}
|
||||||
|
driver-opts: image=${{ env.BUILDKIT_IMAGE }}
|
||||||
use: false
|
use: false
|
||||||
-
|
-
|
||||||
name: Install
|
name: Install
|
||||||
|
|||||||
@@ -0,0 +1 @@
|
|||||||
|
{"LocalPath":"/home/crazy/foo/bar/https:/github.com/docker/actions-toolkit.git#:__tests__/fixtures","DockerfilePath":"/home/crazy/foo/bar/hello.Dockerfile"}
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
{"LocalPath":"/home/crazy/foo/bar/https:/github.com/docker/actions-toolkit.git#:__tests__/fixtures","DockerfilePath":"/home/crazy/foo/bar/-"}
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
{"LocalPath":"/home/crazy/foo/bar/-","DockerfilePath":""}
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
{"LocalPath":"/home/crazy/foo/bar/https:/github.com/docker/buildx.git","DockerfilePath":""}
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
{"LocalPath":"https://github.com/docker/actions-toolkit.git#:__tests__/fixtures","DockerfilePath":"hello.Dockerfile"}
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
{"LocalPath":"/home/crazy/hello","DockerfilePath":"/home/crazy/hello/-"}
|
||||||
19
__tests__/.fixtures/hello-err.Dockerfile
Normal file
19
__tests__/.fixtures/hello-err.Dockerfile
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
# syntax=docker/dockerfile:1
|
||||||
|
|
||||||
|
# Copyright 2024 actions-toolkit authors
|
||||||
|
#
|
||||||
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
# you may not use this file except in compliance with the License.
|
||||||
|
# You may obtain a copy of the License at
|
||||||
|
#
|
||||||
|
# http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
#
|
||||||
|
# Unless required by applicable law or agreed to in writing, software
|
||||||
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
# See the License for the specific language governing permissions and
|
||||||
|
# limitations under the License.
|
||||||
|
|
||||||
|
FROM busybox:latest
|
||||||
|
ARGGG NAME=foo
|
||||||
|
RUN echo "hello $NAME"
|
||||||
26
__tests__/.fixtures/lint-other.Dockerfile
Normal file
26
__tests__/.fixtures/lint-other.Dockerfile
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
# syntax=docker/dockerfile-upstream:master
|
||||||
|
|
||||||
|
# Copyright 2024 actions-toolkit authors
|
||||||
|
#
|
||||||
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
# you may not use this file except in compliance with the License.
|
||||||
|
# You may obtain a copy of the License at
|
||||||
|
#
|
||||||
|
# http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
#
|
||||||
|
# Unless required by applicable law or agreed to in writing, software
|
||||||
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
# See the License for the specific language governing permissions and
|
||||||
|
# limitations under the License.
|
||||||
|
|
||||||
|
frOM busybox as base
|
||||||
|
cOpy lint-other.Dockerfile .
|
||||||
|
|
||||||
|
froM busybox aS notused
|
||||||
|
COPY lint-other.Dockerfile .
|
||||||
|
|
||||||
|
from scratch
|
||||||
|
COPy --from=base \
|
||||||
|
/lint-other.Dockerfile \
|
||||||
|
/
|
||||||
31
__tests__/.fixtures/lint.Dockerfile
Normal file
31
__tests__/.fixtures/lint.Dockerfile
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
# syntax=docker/dockerfile-upstream:master
|
||||||
|
|
||||||
|
# Copyright 2024 actions-toolkit authors
|
||||||
|
#
|
||||||
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
# you may not use this file except in compliance with the License.
|
||||||
|
# You may obtain a copy of the License at
|
||||||
|
#
|
||||||
|
# http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
#
|
||||||
|
# Unless required by applicable law or agreed to in writing, software
|
||||||
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
# See the License for the specific language governing permissions and
|
||||||
|
# limitations under the License.
|
||||||
|
|
||||||
|
frOM busybox as base
|
||||||
|
cOpy lint.Dockerfile .
|
||||||
|
|
||||||
|
# some special chars: distroless/python3-debian12のPythonは3.11
|
||||||
|
# https://github.com/docker/build-push-action/issues/1204#issuecomment-2274056016
|
||||||
|
|
||||||
|
from scratch
|
||||||
|
MAINTAINER moby@example.com
|
||||||
|
COPy --from=base \
|
||||||
|
/lint.Dockerfile \
|
||||||
|
/
|
||||||
|
|
||||||
|
CMD [ "echo", "Hello, Norway!" ]
|
||||||
|
CMD [ "echo", "Hello, Sweden!" ]
|
||||||
|
ENTRYPOINT my-program start
|
||||||
26
__tests__/.fixtures/lint.hcl
Normal file
26
__tests__/.fixtures/lint.hcl
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
// Copyright 2024 actions-toolkit authors
|
||||||
|
//
|
||||||
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
// you may not use this file except in compliance with the License.
|
||||||
|
// You may obtain a copy of the License at
|
||||||
|
//
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
//
|
||||||
|
// Unless required by applicable law or agreed to in writing, software
|
||||||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
// See the License for the specific language governing permissions and
|
||||||
|
// limitations under the License.
|
||||||
|
|
||||||
|
group "default" {
|
||||||
|
targets = ["lint", "lint-other", "lint-inline"]
|
||||||
|
}
|
||||||
|
target "lint" {
|
||||||
|
dockerfile = "lint.Dockerfile"
|
||||||
|
}
|
||||||
|
target "lint-other" {
|
||||||
|
dockerfile = "lint-other.Dockerfile"
|
||||||
|
}
|
||||||
|
target "lint-inline" {
|
||||||
|
dockerfile-inline = "FRoM alpine\nENTRYPOINT [\"echo\", \"hello\"]"
|
||||||
|
}
|
||||||
476
__tests__/.fixtures/metadata-bake.json
Normal file
476
__tests__/.fixtures/metadata-bake.json
Normal file
@@ -0,0 +1,476 @@
|
|||||||
|
{
|
||||||
|
"buildx.build.warnings": [
|
||||||
|
{
|
||||||
|
"vertex": "sha256:a5ba072453def0016837337b14eac8e587782c88e0f40bef076f63c91aa757b4",
|
||||||
|
"level": 1,
|
||||||
|
"short": "Q29uc2lzdGVudEluc3RydWN0aW9uQ2FzaW5nOiBDb21tYW5kICdmck9NJyBzaG91bGQgbWF0Y2ggdGhlIGNhc2Ugb2YgdGhlIGNvbW1hbmQgbWFqb3JpdHkgKHVwcGVyY2FzZSkgKGxpbmUgMTcp",
|
||||||
|
"detail": [
|
||||||
|
"QWxsIGNvbW1hbmRzIHdpdGhpbiB0aGUgRG9ja2VyZmlsZSBzaG91bGQgdXNlIHRoZSBzYW1lIGNhc2luZyAoZWl0aGVyIHVwcGVyIG9yIGxvd2VyKQ=="
|
||||||
|
],
|
||||||
|
"url": "https://docs.docker.com/go/dockerfile/rule/consistent-instruction-casing/",
|
||||||
|
"sourceInfo": {
|
||||||
|
"filename": "lint-other.Dockerfile",
|
||||||
|
"data": "IyBzeW50YXg9ZG9ja2VyL2RvY2tlcmZpbGUtdXBzdHJlYW06bWFzdGVyCgojIENvcHlyaWdodCAyMDI0IGFjdGlvbnMtdG9vbGtpdCBhdXRob3JzCiMKIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCiMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMKIyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAojCiMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAojIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgoKZnJPTSBidXN5Ym94IGFzIGJhc2UKY09weSBsaW50LW90aGVyLkRvY2tlcmZpbGUgLgoKZnJvTSBidXN5Ym94IGFTIG5vdHVzZWQKQ09QWSBsaW50LW90aGVyLkRvY2tlcmZpbGUgLgoKZnJvbSBzY3JhdGNoCkNPUHkgLS1mcm9tPWJhc2UgXAogIC9saW50LW90aGVyLkRvY2tlcmZpbGUgXAogIC8K",
|
||||||
|
"language": "Dockerfile"
|
||||||
|
},
|
||||||
|
"range": [
|
||||||
|
{
|
||||||
|
"start": {
|
||||||
|
"line": 17
|
||||||
|
},
|
||||||
|
"end": {
|
||||||
|
"line": 17
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"vertex": "sha256:a5ba072453def0016837337b14eac8e587782c88e0f40bef076f63c91aa757b4",
|
||||||
|
"level": 1,
|
||||||
|
"short": "Q29uc2lzdGVudEluc3RydWN0aW9uQ2FzaW5nOiBDb21tYW5kICdmcm9NJyBzaG91bGQgbWF0Y2ggdGhlIGNhc2Ugb2YgdGhlIGNvbW1hbmQgbWFqb3JpdHkgKHVwcGVyY2FzZSkgKGxpbmUgMjAp",
|
||||||
|
"detail": [
|
||||||
|
"QWxsIGNvbW1hbmRzIHdpdGhpbiB0aGUgRG9ja2VyZmlsZSBzaG91bGQgdXNlIHRoZSBzYW1lIGNhc2luZyAoZWl0aGVyIHVwcGVyIG9yIGxvd2VyKQ=="
|
||||||
|
],
|
||||||
|
"url": "https://docs.docker.com/go/dockerfile/rule/consistent-instruction-casing/",
|
||||||
|
"sourceInfo": {
|
||||||
|
"filename": "lint-other.Dockerfile",
|
||||||
|
"data": "IyBzeW50YXg9ZG9ja2VyL2RvY2tlcmZpbGUtdXBzdHJlYW06bWFzdGVyCgojIENvcHlyaWdodCAyMDI0IGFjdGlvbnMtdG9vbGtpdCBhdXRob3JzCiMKIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCiMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMKIyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAojCiMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAojIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgoKZnJPTSBidXN5Ym94IGFzIGJhc2UKY09weSBsaW50LW90aGVyLkRvY2tlcmZpbGUgLgoKZnJvTSBidXN5Ym94IGFTIG5vdHVzZWQKQ09QWSBsaW50LW90aGVyLkRvY2tlcmZpbGUgLgoKZnJvbSBzY3JhdGNoCkNPUHkgLS1mcm9tPWJhc2UgXAogIC9saW50LW90aGVyLkRvY2tlcmZpbGUgXAogIC8K",
|
||||||
|
"language": "Dockerfile"
|
||||||
|
},
|
||||||
|
"range": [
|
||||||
|
{
|
||||||
|
"start": {
|
||||||
|
"line": 20
|
||||||
|
},
|
||||||
|
"end": {
|
||||||
|
"line": 20
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"vertex": "sha256:a5ba072453def0016837337b14eac8e587782c88e0f40bef076f63c91aa757b4",
|
||||||
|
"level": 1,
|
||||||
|
"short": "Q29uc2lzdGVudEluc3RydWN0aW9uQ2FzaW5nOiBDb21tYW5kICdDT1B5JyBzaG91bGQgbWF0Y2ggdGhlIGNhc2Ugb2YgdGhlIGNvbW1hbmQgbWFqb3JpdHkgKHVwcGVyY2FzZSkgKGxpbmUgMjQp",
|
||||||
|
"detail": [
|
||||||
|
"QWxsIGNvbW1hbmRzIHdpdGhpbiB0aGUgRG9ja2VyZmlsZSBzaG91bGQgdXNlIHRoZSBzYW1lIGNhc2luZyAoZWl0aGVyIHVwcGVyIG9yIGxvd2VyKQ=="
|
||||||
|
],
|
||||||
|
"url": "https://docs.docker.com/go/dockerfile/rule/consistent-instruction-casing/",
|
||||||
|
"sourceInfo": {
|
||||||
|
"filename": "lint-other.Dockerfile",
|
||||||
|
"data": "IyBzeW50YXg9ZG9ja2VyL2RvY2tlcmZpbGUtdXBzdHJlYW06bWFzdGVyCgojIENvcHlyaWdodCAyMDI0IGFjdGlvbnMtdG9vbGtpdCBhdXRob3JzCiMKIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCiMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMKIyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAojCiMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAojIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgoKZnJPTSBidXN5Ym94IGFzIGJhc2UKY09weSBsaW50LW90aGVyLkRvY2tlcmZpbGUgLgoKZnJvTSBidXN5Ym94IGFTIG5vdHVzZWQKQ09QWSBsaW50LW90aGVyLkRvY2tlcmZpbGUgLgoKZnJvbSBzY3JhdGNoCkNPUHkgLS1mcm9tPWJhc2UgXAogIC9saW50LW90aGVyLkRvY2tlcmZpbGUgXAogIC8K",
|
||||||
|
"language": "Dockerfile"
|
||||||
|
},
|
||||||
|
"range": [
|
||||||
|
{
|
||||||
|
"start": {
|
||||||
|
"line": 24
|
||||||
|
},
|
||||||
|
"end": {
|
||||||
|
"line": 24
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"start": {
|
||||||
|
"line": 25
|
||||||
|
},
|
||||||
|
"end": {
|
||||||
|
"line": 25
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"start": {
|
||||||
|
"line": 26
|
||||||
|
},
|
||||||
|
"end": {
|
||||||
|
"line": 26
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"vertex": "sha256:703fee0c090bf71539abdd28ae63eb49ced05ebd6da49db96224888f49db219d",
|
||||||
|
"level": 1,
|
||||||
|
"short": "Q29uc2lzdGVudEluc3RydWN0aW9uQ2FzaW5nOiBDb21tYW5kICdmcm9tJyBzaG91bGQgbWF0Y2ggdGhlIGNhc2Ugb2YgdGhlIGNvbW1hbmQgbWFqb3JpdHkgKHVwcGVyY2FzZSkgKGxpbmUgMjAp",
|
||||||
|
"detail": [
|
||||||
|
"QWxsIGNvbW1hbmRzIHdpdGhpbiB0aGUgRG9ja2VyZmlsZSBzaG91bGQgdXNlIHRoZSBzYW1lIGNhc2luZyAoZWl0aGVyIHVwcGVyIG9yIGxvd2VyKQ=="
|
||||||
|
],
|
||||||
|
"url": "https://docs.docker.com/go/dockerfile/rule/consistent-instruction-casing/",
|
||||||
|
"sourceInfo": {
|
||||||
|
"filename": "lint.Dockerfile",
|
||||||
|
"data": "IyBzeW50YXg9ZG9ja2VyL2RvY2tlcmZpbGUtdXBzdHJlYW06bWFzdGVyCgojIENvcHlyaWdodCAyMDI0IGFjdGlvbnMtdG9vbGtpdCBhdXRob3JzCiMKIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCiMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMKIyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAojCiMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAojIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgoKZnJPTSBidXN5Ym94IGFzIGJhc2UKY09weSBsaW50LkRvY2tlcmZpbGUgLgoKZnJvbSBzY3JhdGNoCk1BSU5UQUlORVIgbW9ieUBleGFtcGxlLmNvbQpDT1B5IC0tZnJvbT1iYXNlIFwKICAvbGludC5Eb2NrZXJmaWxlIFwKICAvCgpDTUQgWyAiZWNobyIsICJIZWxsbywgTm9yd2F5ISIgXQpDTUQgWyAiZWNobyIsICJIZWxsbywgU3dlZGVuISIgXQpFTlRSWVBPSU5UIG15LXByb2dyYW0gc3RhcnQK",
|
||||||
|
"language": "Dockerfile"
|
||||||
|
},
|
||||||
|
"range": [
|
||||||
|
{
|
||||||
|
"start": {
|
||||||
|
"line": 20
|
||||||
|
},
|
||||||
|
"end": {
|
||||||
|
"line": 20
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"vertex": "sha256:703fee0c090bf71539abdd28ae63eb49ced05ebd6da49db96224888f49db219d",
|
||||||
|
"level": 1,
|
||||||
|
"short": "TWFpbnRhaW5lckRlcHJlY2F0ZWQ6IE1haW50YWluZXIgaW5zdHJ1Y3Rpb24gaXMgZGVwcmVjYXRlZCBpbiBmYXZvciBvZiB1c2luZyBsYWJlbCAobGluZSAyMSk=",
|
||||||
|
"detail": [
|
||||||
|
"VGhlIE1BSU5UQUlORVIgaW5zdHJ1Y3Rpb24gaXMgZGVwcmVjYXRlZCwgdXNlIGEgbGFiZWwgaW5zdGVhZCB0byBkZWZpbmUgYW4gaW1hZ2UgYXV0aG9y"
|
||||||
|
],
|
||||||
|
"url": "https://docs.docker.com/go/dockerfile/rule/maintainer-deprecated/",
|
||||||
|
"sourceInfo": {
|
||||||
|
"filename": "lint.Dockerfile",
|
||||||
|
"data": "IyBzeW50YXg9ZG9ja2VyL2RvY2tlcmZpbGUtdXBzdHJlYW06bWFzdGVyCgojIENvcHlyaWdodCAyMDI0IGFjdGlvbnMtdG9vbGtpdCBhdXRob3JzCiMKIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCiMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMKIyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAojCiMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAojIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgoKZnJPTSBidXN5Ym94IGFzIGJhc2UKY09weSBsaW50LkRvY2tlcmZpbGUgLgoKZnJvbSBzY3JhdGNoCk1BSU5UQUlORVIgbW9ieUBleGFtcGxlLmNvbQpDT1B5IC0tZnJvbT1iYXNlIFwKICAvbGludC5Eb2NrZXJmaWxlIFwKICAvCgpDTUQgWyAiZWNobyIsICJIZWxsbywgTm9yd2F5ISIgXQpDTUQgWyAiZWNobyIsICJIZWxsbywgU3dlZGVuISIgXQpFTlRSWVBPSU5UIG15LXByb2dyYW0gc3RhcnQK",
|
||||||
|
"language": "Dockerfile"
|
||||||
|
},
|
||||||
|
"range": [
|
||||||
|
{
|
||||||
|
"start": {
|
||||||
|
"line": 21
|
||||||
|
},
|
||||||
|
"end": {
|
||||||
|
"line": 21
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"vertex": "sha256:703fee0c090bf71539abdd28ae63eb49ced05ebd6da49db96224888f49db219d",
|
||||||
|
"level": 1,
|
||||||
|
"short": "TXVsdGlwbGVJbnN0cnVjdGlvbnNEaXNhbGxvd2VkOiBNdWx0aXBsZSBDTUQgaW5zdHJ1Y3Rpb25zIHNob3VsZCBub3QgYmUgdXNlZCBpbiB0aGUgc2FtZSBzdGFnZSBiZWNhdXNlIG9ubHkgdGhlIGxhc3Qgb25lIHdpbGwgYmUgdXNlZCAobGluZSAyNik=",
|
||||||
|
"detail": [
|
||||||
|
"TXVsdGlwbGUgaW5zdHJ1Y3Rpb25zIG9mIHRoZSBzYW1lIHR5cGUgc2hvdWxkIG5vdCBiZSB1c2VkIGluIHRoZSBzYW1lIHN0YWdl"
|
||||||
|
],
|
||||||
|
"url": "https://docs.docker.com/go/dockerfile/rule/multiple-instructions-disallowed/",
|
||||||
|
"sourceInfo": {
|
||||||
|
"filename": "lint.Dockerfile",
|
||||||
|
"data": "IyBzeW50YXg9ZG9ja2VyL2RvY2tlcmZpbGUtdXBzdHJlYW06bWFzdGVyCgojIENvcHlyaWdodCAyMDI0IGFjdGlvbnMtdG9vbGtpdCBhdXRob3JzCiMKIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCiMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMKIyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAojCiMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAojIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgoKZnJPTSBidXN5Ym94IGFzIGJhc2UKY09weSBsaW50LkRvY2tlcmZpbGUgLgoKZnJvbSBzY3JhdGNoCk1BSU5UQUlORVIgbW9ieUBleGFtcGxlLmNvbQpDT1B5IC0tZnJvbT1iYXNlIFwKICAvbGludC5Eb2NrZXJmaWxlIFwKICAvCgpDTUQgWyAiZWNobyIsICJIZWxsbywgTm9yd2F5ISIgXQpDTUQgWyAiZWNobyIsICJIZWxsbywgU3dlZGVuISIgXQpFTlRSWVBPSU5UIG15LXByb2dyYW0gc3RhcnQK",
|
||||||
|
"language": "Dockerfile"
|
||||||
|
},
|
||||||
|
"range": [
|
||||||
|
{
|
||||||
|
"start": {
|
||||||
|
"line": 26
|
||||||
|
},
|
||||||
|
"end": {
|
||||||
|
"line": 26
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"vertex": "sha256:703fee0c090bf71539abdd28ae63eb49ced05ebd6da49db96224888f49db219d",
|
||||||
|
"level": 1,
|
||||||
|
"short": "SlNPTkFyZ3NSZWNvbW1lbmRlZDogSlNPTiBhcmd1bWVudHMgcmVjb21tZW5kZWQgZm9yIEVOVFJZUE9JTlQgdG8gcHJldmVudCB1bmludGVuZGVkIGJlaGF2aW9yIHJlbGF0ZWQgdG8gT1Mgc2lnbmFscyAobGluZSAyOCk=",
|
||||||
|
"detail": [
|
||||||
|
"SlNPTiBhcmd1bWVudHMgcmVjb21tZW5kZWQgZm9yIEVOVFJZUE9JTlQvQ01EIHRvIHByZXZlbnQgdW5pbnRlbmRlZCBiZWhhdmlvciByZWxhdGVkIHRvIE9TIHNpZ25hbHM="
|
||||||
|
],
|
||||||
|
"url": "https://docs.docker.com/go/dockerfile/rule/json-args-recommended/",
|
||||||
|
"sourceInfo": {
|
||||||
|
"filename": "lint.Dockerfile",
|
||||||
|
"data": "IyBzeW50YXg9ZG9ja2VyL2RvY2tlcmZpbGUtdXBzdHJlYW06bWFzdGVyCgojIENvcHlyaWdodCAyMDI0IGFjdGlvbnMtdG9vbGtpdCBhdXRob3JzCiMKIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCiMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMKIyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAojCiMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAojIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgoKZnJPTSBidXN5Ym94IGFzIGJhc2UKY09weSBsaW50LkRvY2tlcmZpbGUgLgoKZnJvbSBzY3JhdGNoCk1BSU5UQUlORVIgbW9ieUBleGFtcGxlLmNvbQpDT1B5IC0tZnJvbT1iYXNlIFwKICAvbGludC5Eb2NrZXJmaWxlIFwKICAvCgpDTUQgWyAiZWNobyIsICJIZWxsbywgTm9yd2F5ISIgXQpDTUQgWyAiZWNobyIsICJIZWxsbywgU3dlZGVuISIgXQpFTlRSWVBPSU5UIG15LXByb2dyYW0gc3RhcnQK",
|
||||||
|
"language": "Dockerfile"
|
||||||
|
},
|
||||||
|
"range": [
|
||||||
|
{
|
||||||
|
"start": {
|
||||||
|
"line": 28
|
||||||
|
},
|
||||||
|
"end": {
|
||||||
|
"line": 28
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"vertex": "sha256:a14452ec03a7f128fb0a1da8c4afdc78175fa9a97ff83ace427b3c39509d459b",
|
||||||
|
"level": 1,
|
||||||
|
"short": "Q29uc2lzdGVudEluc3RydWN0aW9uQ2FzaW5nOiBDb21tYW5kICdGUm9NJyBzaG91bGQgbWF0Y2ggdGhlIGNhc2Ugb2YgdGhlIGNvbW1hbmQgbWFqb3JpdHkgKHVwcGVyY2FzZSkgKGxpbmUgMSk=",
|
||||||
|
"detail": [
|
||||||
|
"QWxsIGNvbW1hbmRzIHdpdGhpbiB0aGUgRG9ja2VyZmlsZSBzaG91bGQgdXNlIHRoZSBzYW1lIGNhc2luZyAoZWl0aGVyIHVwcGVyIG9yIGxvd2VyKQ=="
|
||||||
|
],
|
||||||
|
"url": "https://docs.docker.com/go/dockerfile/rule/consistent-instruction-casing/",
|
||||||
|
"sourceInfo": {
|
||||||
|
"filename": "Dockerfile",
|
||||||
|
"data": "RlJvTSBhbHBpbmUKRU5UUllQT0lOVCBbImVjaG8iLCAiaGVsbG8iXQ==",
|
||||||
|
"language": "Dockerfile"
|
||||||
|
},
|
||||||
|
"range": [
|
||||||
|
{
|
||||||
|
"start": {
|
||||||
|
"line": 1
|
||||||
|
},
|
||||||
|
"end": {
|
||||||
|
"line": 1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"vertex": "sha256:a5ba072453def0016837337b14eac8e587782c88e0f40bef076f63c91aa757b4",
|
||||||
|
"level": 1,
|
||||||
|
"short": "Q29uc2lzdGVudEluc3RydWN0aW9uQ2FzaW5nOiBDb21tYW5kICdmcm9tJyBzaG91bGQgbWF0Y2ggdGhlIGNhc2Ugb2YgdGhlIGNvbW1hbmQgbWFqb3JpdHkgKHVwcGVyY2FzZSkgKGxpbmUgMjMp",
|
||||||
|
"detail": [
|
||||||
|
"QWxsIGNvbW1hbmRzIHdpdGhpbiB0aGUgRG9ja2VyZmlsZSBzaG91bGQgdXNlIHRoZSBzYW1lIGNhc2luZyAoZWl0aGVyIHVwcGVyIG9yIGxvd2VyKQ=="
|
||||||
|
],
|
||||||
|
"url": "https://docs.docker.com/go/dockerfile/rule/consistent-instruction-casing/",
|
||||||
|
"sourceInfo": {
|
||||||
|
"filename": "lint-other.Dockerfile",
|
||||||
|
"data": "IyBzeW50YXg9ZG9ja2VyL2RvY2tlcmZpbGUtdXBzdHJlYW06bWFzdGVyCgojIENvcHlyaWdodCAyMDI0IGFjdGlvbnMtdG9vbGtpdCBhdXRob3JzCiMKIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCiMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMKIyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAojCiMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAojIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgoKZnJPTSBidXN5Ym94IGFzIGJhc2UKY09weSBsaW50LW90aGVyLkRvY2tlcmZpbGUgLgoKZnJvTSBidXN5Ym94IGFTIG5vdHVzZWQKQ09QWSBsaW50LW90aGVyLkRvY2tlcmZpbGUgLgoKZnJvbSBzY3JhdGNoCkNPUHkgLS1mcm9tPWJhc2UgXAogIC9saW50LW90aGVyLkRvY2tlcmZpbGUgXAogIC8K",
|
||||||
|
"language": "Dockerfile"
|
||||||
|
},
|
||||||
|
"range": [
|
||||||
|
{
|
||||||
|
"start": {
|
||||||
|
"line": 23
|
||||||
|
},
|
||||||
|
"end": {
|
||||||
|
"line": 23
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"vertex": "sha256:703fee0c090bf71539abdd28ae63eb49ced05ebd6da49db96224888f49db219d",
|
||||||
|
"level": 1,
|
||||||
|
"short": "Q29uc2lzdGVudEluc3RydWN0aW9uQ2FzaW5nOiBDb21tYW5kICdmck9NJyBzaG91bGQgbWF0Y2ggdGhlIGNhc2Ugb2YgdGhlIGNvbW1hbmQgbWFqb3JpdHkgKHVwcGVyY2FzZSkgKGxpbmUgMTcp",
|
||||||
|
"detail": [
|
||||||
|
"QWxsIGNvbW1hbmRzIHdpdGhpbiB0aGUgRG9ja2VyZmlsZSBzaG91bGQgdXNlIHRoZSBzYW1lIGNhc2luZyAoZWl0aGVyIHVwcGVyIG9yIGxvd2VyKQ=="
|
||||||
|
],
|
||||||
|
"url": "https://docs.docker.com/go/dockerfile/rule/consistent-instruction-casing/",
|
||||||
|
"sourceInfo": {
|
||||||
|
"filename": "lint.Dockerfile",
|
||||||
|
"data": "IyBzeW50YXg9ZG9ja2VyL2RvY2tlcmZpbGUtdXBzdHJlYW06bWFzdGVyCgojIENvcHlyaWdodCAyMDI0IGFjdGlvbnMtdG9vbGtpdCBhdXRob3JzCiMKIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCiMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMKIyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAojCiMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAojIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgoKZnJPTSBidXN5Ym94IGFzIGJhc2UKY09weSBsaW50LkRvY2tlcmZpbGUgLgoKZnJvbSBzY3JhdGNoCk1BSU5UQUlORVIgbW9ieUBleGFtcGxlLmNvbQpDT1B5IC0tZnJvbT1iYXNlIFwKICAvbGludC5Eb2NrZXJmaWxlIFwKICAvCgpDTUQgWyAiZWNobyIsICJIZWxsbywgTm9yd2F5ISIgXQpDTUQgWyAiZWNobyIsICJIZWxsbywgU3dlZGVuISIgXQpFTlRSWVBPSU5UIG15LXByb2dyYW0gc3RhcnQK",
|
||||||
|
"language": "Dockerfile"
|
||||||
|
},
|
||||||
|
"range": [
|
||||||
|
{
|
||||||
|
"start": {
|
||||||
|
"line": 17
|
||||||
|
},
|
||||||
|
"end": {
|
||||||
|
"line": 17
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"vertex": "sha256:703fee0c090bf71539abdd28ae63eb49ced05ebd6da49db96224888f49db219d",
|
||||||
|
"level": 1,
|
||||||
|
"short": "Q29uc2lzdGVudEluc3RydWN0aW9uQ2FzaW5nOiBDb21tYW5kICdjT3B5JyBzaG91bGQgbWF0Y2ggdGhlIGNhc2Ugb2YgdGhlIGNvbW1hbmQgbWFqb3JpdHkgKHVwcGVyY2FzZSkgKGxpbmUgMTgp",
|
||||||
|
"detail": [
|
||||||
|
"QWxsIGNvbW1hbmRzIHdpdGhpbiB0aGUgRG9ja2VyZmlsZSBzaG91bGQgdXNlIHRoZSBzYW1lIGNhc2luZyAoZWl0aGVyIHVwcGVyIG9yIGxvd2VyKQ=="
|
||||||
|
],
|
||||||
|
"url": "https://docs.docker.com/go/dockerfile/rule/consistent-instruction-casing/",
|
||||||
|
"sourceInfo": {
|
||||||
|
"filename": "lint.Dockerfile",
|
||||||
|
"data": "IyBzeW50YXg9ZG9ja2VyL2RvY2tlcmZpbGUtdXBzdHJlYW06bWFzdGVyCgojIENvcHlyaWdodCAyMDI0IGFjdGlvbnMtdG9vbGtpdCBhdXRob3JzCiMKIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCiMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMKIyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAojCiMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAojIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgoKZnJPTSBidXN5Ym94IGFzIGJhc2UKY09weSBsaW50LkRvY2tlcmZpbGUgLgoKZnJvbSBzY3JhdGNoCk1BSU5UQUlORVIgbW9ieUBleGFtcGxlLmNvbQpDT1B5IC0tZnJvbT1iYXNlIFwKICAvbGludC5Eb2NrZXJmaWxlIFwKICAvCgpDTUQgWyAiZWNobyIsICJIZWxsbywgTm9yd2F5ISIgXQpDTUQgWyAiZWNobyIsICJIZWxsbywgU3dlZGVuISIgXQpFTlRSWVBPSU5UIG15LXByb2dyYW0gc3RhcnQK",
|
||||||
|
"language": "Dockerfile"
|
||||||
|
},
|
||||||
|
"range": [
|
||||||
|
{
|
||||||
|
"start": {
|
||||||
|
"line": 18
|
||||||
|
},
|
||||||
|
"end": {
|
||||||
|
"line": 18
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"vertex": "sha256:703fee0c090bf71539abdd28ae63eb49ced05ebd6da49db96224888f49db219d",
|
||||||
|
"level": 1,
|
||||||
|
"short": "Q29uc2lzdGVudEluc3RydWN0aW9uQ2FzaW5nOiBDb21tYW5kICdDT1B5JyBzaG91bGQgbWF0Y2ggdGhlIGNhc2Ugb2YgdGhlIGNvbW1hbmQgbWFqb3JpdHkgKHVwcGVyY2FzZSkgKGxpbmUgMjIp",
|
||||||
|
"detail": [
|
||||||
|
"QWxsIGNvbW1hbmRzIHdpdGhpbiB0aGUgRG9ja2VyZmlsZSBzaG91bGQgdXNlIHRoZSBzYW1lIGNhc2luZyAoZWl0aGVyIHVwcGVyIG9yIGxvd2VyKQ=="
|
||||||
|
],
|
||||||
|
"url": "https://docs.docker.com/go/dockerfile/rule/consistent-instruction-casing/",
|
||||||
|
"sourceInfo": {
|
||||||
|
"filename": "lint.Dockerfile",
|
||||||
|
"data": "IyBzeW50YXg9ZG9ja2VyL2RvY2tlcmZpbGUtdXBzdHJlYW06bWFzdGVyCgojIENvcHlyaWdodCAyMDI0IGFjdGlvbnMtdG9vbGtpdCBhdXRob3JzCiMKIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCiMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMKIyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAojCiMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAojIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgoKZnJPTSBidXN5Ym94IGFzIGJhc2UKY09weSBsaW50LkRvY2tlcmZpbGUgLgoKZnJvbSBzY3JhdGNoCk1BSU5UQUlORVIgbW9ieUBleGFtcGxlLmNvbQpDT1B5IC0tZnJvbT1iYXNlIFwKICAvbGludC5Eb2NrZXJmaWxlIFwKICAvCgpDTUQgWyAiZWNobyIsICJIZWxsbywgTm9yd2F5ISIgXQpDTUQgWyAiZWNobyIsICJIZWxsbywgU3dlZGVuISIgXQpFTlRSWVBPSU5UIG15LXByb2dyYW0gc3RhcnQK",
|
||||||
|
"language": "Dockerfile"
|
||||||
|
},
|
||||||
|
"range": [
|
||||||
|
{
|
||||||
|
"start": {
|
||||||
|
"line": 22
|
||||||
|
},
|
||||||
|
"end": {
|
||||||
|
"line": 22
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"start": {
|
||||||
|
"line": 23
|
||||||
|
},
|
||||||
|
"end": {
|
||||||
|
"line": 23
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"start": {
|
||||||
|
"line": 24
|
||||||
|
},
|
||||||
|
"end": {
|
||||||
|
"line": 24
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"vertex": "sha256:a5ba072453def0016837337b14eac8e587782c88e0f40bef076f63c91aa757b4",
|
||||||
|
"level": 1,
|
||||||
|
"short": "Q29uc2lzdGVudEluc3RydWN0aW9uQ2FzaW5nOiBDb21tYW5kICdjT3B5JyBzaG91bGQgbWF0Y2ggdGhlIGNhc2Ugb2YgdGhlIGNvbW1hbmQgbWFqb3JpdHkgKHVwcGVyY2FzZSkgKGxpbmUgMTgp",
|
||||||
|
"detail": [
|
||||||
|
"QWxsIGNvbW1hbmRzIHdpdGhpbiB0aGUgRG9ja2VyZmlsZSBzaG91bGQgdXNlIHRoZSBzYW1lIGNhc2luZyAoZWl0aGVyIHVwcGVyIG9yIGxvd2VyKQ=="
|
||||||
|
],
|
||||||
|
"url": "https://docs.docker.com/go/dockerfile/rule/consistent-instruction-casing/",
|
||||||
|
"sourceInfo": {
|
||||||
|
"filename": "lint-other.Dockerfile",
|
||||||
|
"data": "IyBzeW50YXg9ZG9ja2VyL2RvY2tlcmZpbGUtdXBzdHJlYW06bWFzdGVyCgojIENvcHlyaWdodCAyMDI0IGFjdGlvbnMtdG9vbGtpdCBhdXRob3JzCiMKIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCiMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMKIyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAojCiMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAojIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgoKZnJPTSBidXN5Ym94IGFzIGJhc2UKY09weSBsaW50LW90aGVyLkRvY2tlcmZpbGUgLgoKZnJvTSBidXN5Ym94IGFTIG5vdHVzZWQKQ09QWSBsaW50LW90aGVyLkRvY2tlcmZpbGUgLgoKZnJvbSBzY3JhdGNoCkNPUHkgLS1mcm9tPWJhc2UgXAogIC9saW50LW90aGVyLkRvY2tlcmZpbGUgXAogIC8K",
|
||||||
|
"language": "Dockerfile"
|
||||||
|
},
|
||||||
|
"range": [
|
||||||
|
{
|
||||||
|
"start": {
|
||||||
|
"line": 18
|
||||||
|
},
|
||||||
|
"end": {
|
||||||
|
"line": 18
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"lint": {
|
||||||
|
"buildx.build.provenance": {
|
||||||
|
"buildType": "https://mobyproject.org/buildkit@v1",
|
||||||
|
"materials": [
|
||||||
|
{
|
||||||
|
"uri": "pkg:docker/docker/dockerfile-upstream@master",
|
||||||
|
"digest": {
|
||||||
|
"sha256": "bcfc291ad4ebc0fb1f53d2b2e4a4f6ba5a6a5df61d8a501aa6edb18f8dec339f"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"uri": "pkg:docker/busybox@latest?platform=linux%2Famd64",
|
||||||
|
"digest": {
|
||||||
|
"sha256": "9ae97d36d26566ff84e8893c64a6dc4fe8ca6d1144bf5b87b2b85a32def253c7"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"invocation": {
|
||||||
|
"configSource": {
|
||||||
|
"entryPoint": "lint.Dockerfile"
|
||||||
|
},
|
||||||
|
"parameters": {
|
||||||
|
"frontend": "gateway.v0",
|
||||||
|
"args": {
|
||||||
|
"cmdline": "docker/dockerfile-upstream:master",
|
||||||
|
"source": "docker/dockerfile-upstream:master"
|
||||||
|
},
|
||||||
|
"locals": [
|
||||||
|
{
|
||||||
|
"name": "context"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "dockerfile"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"environment": {
|
||||||
|
"platform": "linux/amd64"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"buildx.build.ref": "default/default/x3tig9yrbzg2bp0ahn840m9hs",
|
||||||
|
"containerimage.config.digest": "sha256:0c1ae53d25e7cad9c1d81de558cdf959dfaf49e32d6918984eae14ae33197c2f",
|
||||||
|
"containerimage.digest": "sha256:0c1ae53d25e7cad9c1d81de558cdf959dfaf49e32d6918984eae14ae33197c2f"
|
||||||
|
},
|
||||||
|
"lint-inline": {
|
||||||
|
"buildx.build.provenance": {
|
||||||
|
"buildType": "https://mobyproject.org/buildkit@v1",
|
||||||
|
"materials": [
|
||||||
|
{
|
||||||
|
"uri": "pkg:docker/alpine@latest?platform=linux%2Famd64",
|
||||||
|
"digest": {
|
||||||
|
"sha256": "94e5f06ff8e3d4441dc3cd8b090ff38dc911bfa8ebdb0dc28395bc98f82f983f"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"invocation": {
|
||||||
|
"configSource": {
|
||||||
|
"entryPoint": "Dockerfile"
|
||||||
|
},
|
||||||
|
"parameters": {
|
||||||
|
"frontend": "dockerfile.v0",
|
||||||
|
"args": {
|
||||||
|
"dockerfilekey": "dockerfile"
|
||||||
|
},
|
||||||
|
"locals": [
|
||||||
|
{
|
||||||
|
"name": "context"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "dockerfile"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"environment": {
|
||||||
|
"platform": "linux/amd64"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"buildx.build.ref": "default/default/f9i6og3j529lrezk83aw9k8fr",
|
||||||
|
"containerimage.config.digest": "sha256:b91f245896946759eb112149602f5638a9263d0ebc3d5e8b46533960494bda32",
|
||||||
|
"containerimage.digest": "sha256:b91f245896946759eb112149602f5638a9263d0ebc3d5e8b46533960494bda32"
|
||||||
|
},
|
||||||
|
"lint-other": {
|
||||||
|
"buildx.build.provenance": {
|
||||||
|
"buildType": "https://mobyproject.org/buildkit@v1",
|
||||||
|
"materials": [
|
||||||
|
{
|
||||||
|
"uri": "pkg:docker/docker/dockerfile-upstream@master",
|
||||||
|
"digest": {
|
||||||
|
"sha256": "bcfc291ad4ebc0fb1f53d2b2e4a4f6ba5a6a5df61d8a501aa6edb18f8dec339f"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"uri": "pkg:docker/busybox@latest?platform=linux%2Famd64",
|
||||||
|
"digest": {
|
||||||
|
"sha256": "9ae97d36d26566ff84e8893c64a6dc4fe8ca6d1144bf5b87b2b85a32def253c7"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"invocation": {
|
||||||
|
"configSource": {
|
||||||
|
"entryPoint": "lint-other.Dockerfile"
|
||||||
|
},
|
||||||
|
"parameters": {
|
||||||
|
"frontend": "gateway.v0",
|
||||||
|
"args": {
|
||||||
|
"cmdline": "docker/dockerfile-upstream:master",
|
||||||
|
"source": "docker/dockerfile-upstream:master"
|
||||||
|
},
|
||||||
|
"locals": [
|
||||||
|
{
|
||||||
|
"name": "context"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "dockerfile"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"environment": {
|
||||||
|
"platform": "linux/amd64"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"buildx.build.ref": "default/default/yfq4itxr5kgustkcmp8jr4b9m",
|
||||||
|
"containerimage.config.digest": "sha256:897b83786d8d9158cd652f8ea0d3c8efcd098273d74f6fb9daa6904144a31537",
|
||||||
|
"containerimage.digest": "sha256:897b83786d8d9158cd652f8ea0d3c8efcd098273d74f6fb9daa6904144a31537"
|
||||||
|
}
|
||||||
|
}
|
||||||
228
__tests__/.fixtures/metadata-build.json
Normal file
228
__tests__/.fixtures/metadata-build.json
Normal file
@@ -0,0 +1,228 @@
|
|||||||
|
{
|
||||||
|
"buildx.build.provenance": {
|
||||||
|
"buildType": "https://mobyproject.org/buildkit@v1",
|
||||||
|
"materials": [
|
||||||
|
{
|
||||||
|
"uri": "pkg:docker/docker/dockerfile-upstream@master",
|
||||||
|
"digest": {
|
||||||
|
"sha256": "70433342168dafa34d11bd7236c3c3fcf448b90539733281711050808f32e835"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"uri": "pkg:docker/busybox@latest?platform=linux%2Famd64",
|
||||||
|
"digest": {
|
||||||
|
"sha256": "9ae97d36d26566ff84e8893c64a6dc4fe8ca6d1144bf5b87b2b85a32def253c7"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"invocation": {
|
||||||
|
"configSource": {
|
||||||
|
"entryPoint": "Dockerfile"
|
||||||
|
},
|
||||||
|
"parameters": {
|
||||||
|
"frontend": "gateway.v0",
|
||||||
|
"args": {
|
||||||
|
"cmdline": "docker/dockerfile-upstream:master",
|
||||||
|
"source": "docker/dockerfile-upstream:master"
|
||||||
|
},
|
||||||
|
"locals": [
|
||||||
|
{
|
||||||
|
"name": "context"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "dockerfile"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"environment": {
|
||||||
|
"platform": "linux/amd64"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"buildx.build.ref": "default/default/n6ibcp9b2pw108rrz7ywdznvo",
|
||||||
|
"buildx.build.warnings": [
|
||||||
|
{
|
||||||
|
"vertex": "sha256:7b477ac5dd3a4c4d2523f7f7f20406b626395de082f44fd5ff996323ec8257d0",
|
||||||
|
"level": 1,
|
||||||
|
"short": "Q29uc2lzdGVudEluc3RydWN0aW9uQ2FzaW5nOiBDb21tYW5kICdmck9NJyBzaG91bGQgYmUgY29uc2lzdGVudGx5IGNhc2VkIChsaW5lIDIp",
|
||||||
|
"detail": [
|
||||||
|
"SW5zdHJ1Y3Rpb25zIHNob3VsZCBiZSBpbiBjb25zaXN0ZW50IGNhc2luZyAoYWxsIGxvd2VyIG9yIGFsbCB1cHBlcik="
|
||||||
|
],
|
||||||
|
"url": "https://docs.docker.com/go/dockerfile/rule/consistent-instruction-casing/",
|
||||||
|
"sourceInfo": {
|
||||||
|
"filename": "Dockerfile",
|
||||||
|
"data": "IyBzeW50YXg9ZG9ja2VyL2RvY2tlcmZpbGUtdXBzdHJlYW06bWFzdGVyCmZyT00gYnVzeWJveCBhcyBiYXNlCmNPcHkgRG9ja2VyZmlsZSAuCgpmcm9tIHNjcmF0Y2gKQ09QeSAtLWZyb209YmFzZSBcCiAgL0RvY2tlcmZpbGUgXAogIC8K",
|
||||||
|
"definition": {
|
||||||
|
"def": [
|
||||||
|
"GsUBChJsb2NhbDovL2RvY2tlcmZpbGUSFAoMbG9jYWwuZGlmZmVyEgRub25lEkoKEWxvY2FsLmZvbGxvd3BhdGhzEjVbIkRvY2tlcmZpbGUiLCJEb2NrZXJmaWxlLmRvY2tlcmlnbm9yZSIsImRvY2tlcmZpbGUiXRIqCg1sb2NhbC5zZXNzaW9uEhkwN3A3MzJ6aGR4NXV1NnVsZDNzOGpteWo2EiEKE2xvY2FsLnNoYXJlZGtleWhpbnQSCmRvY2tlcmZpbGVaAA==",
|
||||||
|
"CkkKR3NoYTI1Njo3YjQ3N2FjNWRkM2E0YzRkMjUyM2Y3ZjdmMjA0MDZiNjI2Mzk1ZGUwODJmNDRmZDVmZjk5NjMyM2VjODI1N2Qw"
|
||||||
|
],
|
||||||
|
"metadata": {
|
||||||
|
"sha256:7b477ac5dd3a4c4d2523f7f7f20406b626395de082f44fd5ff996323ec8257d0": {
|
||||||
|
"description": {
|
||||||
|
"llb.customname": "[internal] load build definition from Dockerfile"
|
||||||
|
},
|
||||||
|
"caps": {
|
||||||
|
"source.local": true,
|
||||||
|
"source.local.followpaths": true,
|
||||||
|
"source.local.sessionid": true,
|
||||||
|
"source.local.sharedkeyhint": true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"sha256:a06279dbe062a3b181c9b918abfaf37ca8106f1f9745b9d42356b3195b205cd1": {
|
||||||
|
"caps": {
|
||||||
|
"constraints": true,
|
||||||
|
"meta.description": true,
|
||||||
|
"platform": true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Source": {
|
||||||
|
"locations": {
|
||||||
|
"sha256:7b477ac5dd3a4c4d2523f7f7f20406b626395de082f44fd5ff996323ec8257d0": {}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"language": "Dockerfile"
|
||||||
|
},
|
||||||
|
"range": [
|
||||||
|
{
|
||||||
|
"start": {
|
||||||
|
"line": 2
|
||||||
|
},
|
||||||
|
"end": {
|
||||||
|
"line": 2
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"vertex": "sha256:7b477ac5dd3a4c4d2523f7f7f20406b626395de082f44fd5ff996323ec8257d0",
|
||||||
|
"level": 1,
|
||||||
|
"short": "Q29uc2lzdGVudEluc3RydWN0aW9uQ2FzaW5nOiBDb21tYW5kICdjT3B5JyBzaG91bGQgYmUgY29uc2lzdGVudGx5IGNhc2VkIChsaW5lIDMp",
|
||||||
|
"detail": [
|
||||||
|
"SW5zdHJ1Y3Rpb25zIHNob3VsZCBiZSBpbiBjb25zaXN0ZW50IGNhc2luZyAoYWxsIGxvd2VyIG9yIGFsbCB1cHBlcik="
|
||||||
|
],
|
||||||
|
"url": "https://docs.docker.com/go/dockerfile/rule/consistent-instruction-casing/",
|
||||||
|
"sourceInfo": {
|
||||||
|
"filename": "Dockerfile",
|
||||||
|
"data": "IyBzeW50YXg9ZG9ja2VyL2RvY2tlcmZpbGUtdXBzdHJlYW06bWFzdGVyCmZyT00gYnVzeWJveCBhcyBiYXNlCmNPcHkgRG9ja2VyZmlsZSAuCgpmcm9tIHNjcmF0Y2gKQ09QeSAtLWZyb209YmFzZSBcCiAgL0RvY2tlcmZpbGUgXAogIC8K",
|
||||||
|
"definition": {
|
||||||
|
"def": [
|
||||||
|
"GsUBChJsb2NhbDovL2RvY2tlcmZpbGUSFAoMbG9jYWwuZGlmZmVyEgRub25lEkoKEWxvY2FsLmZvbGxvd3BhdGhzEjVbIkRvY2tlcmZpbGUiLCJEb2NrZXJmaWxlLmRvY2tlcmlnbm9yZSIsImRvY2tlcmZpbGUiXRIqCg1sb2NhbC5zZXNzaW9uEhkwN3A3MzJ6aGR4NXV1NnVsZDNzOGpteWo2EiEKE2xvY2FsLnNoYXJlZGtleWhpbnQSCmRvY2tlcmZpbGVaAA==",
|
||||||
|
"CkkKR3NoYTI1Njo3YjQ3N2FjNWRkM2E0YzRkMjUyM2Y3ZjdmMjA0MDZiNjI2Mzk1ZGUwODJmNDRmZDVmZjk5NjMyM2VjODI1N2Qw"
|
||||||
|
],
|
||||||
|
"metadata": {
|
||||||
|
"sha256:7b477ac5dd3a4c4d2523f7f7f20406b626395de082f44fd5ff996323ec8257d0": {
|
||||||
|
"description": {
|
||||||
|
"llb.customname": "[internal] load build definition from Dockerfile"
|
||||||
|
},
|
||||||
|
"caps": {
|
||||||
|
"source.local": true,
|
||||||
|
"source.local.followpaths": true,
|
||||||
|
"source.local.sessionid": true,
|
||||||
|
"source.local.sharedkeyhint": true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"sha256:a06279dbe062a3b181c9b918abfaf37ca8106f1f9745b9d42356b3195b205cd1": {
|
||||||
|
"caps": {
|
||||||
|
"constraints": true,
|
||||||
|
"meta.description": true,
|
||||||
|
"platform": true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Source": {
|
||||||
|
"locations": {
|
||||||
|
"sha256:7b477ac5dd3a4c4d2523f7f7f20406b626395de082f44fd5ff996323ec8257d0": {}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"language": "Dockerfile"
|
||||||
|
},
|
||||||
|
"range": [
|
||||||
|
{
|
||||||
|
"start": {
|
||||||
|
"line": 3
|
||||||
|
},
|
||||||
|
"end": {
|
||||||
|
"line": 3
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"vertex": "sha256:7b477ac5dd3a4c4d2523f7f7f20406b626395de082f44fd5ff996323ec8257d0",
|
||||||
|
"level": 1,
|
||||||
|
"short": "Q29uc2lzdGVudEluc3RydWN0aW9uQ2FzaW5nOiBDb21tYW5kICdDT1B5JyBzaG91bGQgYmUgY29uc2lzdGVudGx5IGNhc2VkIChsaW5lIDYp",
|
||||||
|
"detail": [
|
||||||
|
"SW5zdHJ1Y3Rpb25zIHNob3VsZCBiZSBpbiBjb25zaXN0ZW50IGNhc2luZyAoYWxsIGxvd2VyIG9yIGFsbCB1cHBlcik="
|
||||||
|
],
|
||||||
|
"url": "https://docs.docker.com/go/dockerfile/rule/consistent-instruction-casing/",
|
||||||
|
"sourceInfo": {
|
||||||
|
"filename": "Dockerfile",
|
||||||
|
"data": "IyBzeW50YXg9ZG9ja2VyL2RvY2tlcmZpbGUtdXBzdHJlYW06bWFzdGVyCmZyT00gYnVzeWJveCBhcyBiYXNlCmNPcHkgRG9ja2VyZmlsZSAuCgpmcm9tIHNjcmF0Y2gKQ09QeSAtLWZyb209YmFzZSBcCiAgL0RvY2tlcmZpbGUgXAogIC8K",
|
||||||
|
"definition": {
|
||||||
|
"def": [
|
||||||
|
"GsUBChJsb2NhbDovL2RvY2tlcmZpbGUSFAoMbG9jYWwuZGlmZmVyEgRub25lEkoKEWxvY2FsLmZvbGxvd3BhdGhzEjVbIkRvY2tlcmZpbGUiLCJEb2NrZXJmaWxlLmRvY2tlcmlnbm9yZSIsImRvY2tlcmZpbGUiXRIqCg1sb2NhbC5zZXNzaW9uEhkwN3A3MzJ6aGR4NXV1NnVsZDNzOGpteWo2EiEKE2xvY2FsLnNoYXJlZGtleWhpbnQSCmRvY2tlcmZpbGVaAA==",
|
||||||
|
"CkkKR3NoYTI1Njo3YjQ3N2FjNWRkM2E0YzRkMjUyM2Y3ZjdmMjA0MDZiNjI2Mzk1ZGUwODJmNDRmZDVmZjk5NjMyM2VjODI1N2Qw"
|
||||||
|
],
|
||||||
|
"metadata": {
|
||||||
|
"sha256:7b477ac5dd3a4c4d2523f7f7f20406b626395de082f44fd5ff996323ec8257d0": {
|
||||||
|
"description": {
|
||||||
|
"llb.customname": "[internal] load build definition from Dockerfile"
|
||||||
|
},
|
||||||
|
"caps": {
|
||||||
|
"source.local": true,
|
||||||
|
"source.local.followpaths": true,
|
||||||
|
"source.local.sessionid": true,
|
||||||
|
"source.local.sharedkeyhint": true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"sha256:a06279dbe062a3b181c9b918abfaf37ca8106f1f9745b9d42356b3195b205cd1": {
|
||||||
|
"caps": {
|
||||||
|
"constraints": true,
|
||||||
|
"meta.description": true,
|
||||||
|
"platform": true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Source": {
|
||||||
|
"locations": {
|
||||||
|
"sha256:7b477ac5dd3a4c4d2523f7f7f20406b626395de082f44fd5ff996323ec8257d0": {}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"language": "Dockerfile"
|
||||||
|
},
|
||||||
|
"range": [
|
||||||
|
{
|
||||||
|
"start": {
|
||||||
|
"line": 6
|
||||||
|
},
|
||||||
|
"end": {
|
||||||
|
"line": 6
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"start": {
|
||||||
|
"line": 7
|
||||||
|
},
|
||||||
|
"end": {
|
||||||
|
"line": 7
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"start": {
|
||||||
|
"line": 8
|
||||||
|
},
|
||||||
|
"end": {
|
||||||
|
"line": 8
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"containerimage.config.digest": "sha256:059b68a595b22564a1cbc167f369349fdc2ecc1f7bc092c2235cbf601a795fd",
|
||||||
|
"containerimage.digest": "sha256:b09b9482c72371486bb2c1d2c2a2633ed1d0b8389e12c8d52b9e052725c0c83c"
|
||||||
|
}
|
||||||
@@ -15,22 +15,20 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
import {describe, expect, jest, test, afterEach} from '@jest/globals';
|
import {describe, expect, jest, test, afterEach} from '@jest/globals';
|
||||||
import * as fs from 'fs';
|
import fs from 'fs';
|
||||||
import * as path from 'path';
|
import os from 'os';
|
||||||
|
import path from 'path';
|
||||||
import * as rimraf from 'rimraf';
|
import * as rimraf from 'rimraf';
|
||||||
|
|
||||||
import {BuildKit} from '../../src/buildkit/buildkit';
|
import {BuildKit} from '../../src/buildkit/buildkit';
|
||||||
import {Context} from '../../src/context';
|
import {Context} from '../../src/context';
|
||||||
|
|
||||||
const fixturesDir = path.join(__dirname, '..', 'fixtures');
|
const fixturesDir = path.join(__dirname, '..', '.fixtures');
|
||||||
// prettier-ignore
|
const tmpDir = fs.mkdtempSync(path.join(process.env.TEMP || os.tmpdir(), 'buildkit-config-'));
|
||||||
const tmpDir = path.join(process.env.TEMP || '/tmp', 'buildkit-config-jest');
|
|
||||||
const tmpName = path.join(tmpDir, '.tmpname-jest');
|
const tmpName = path.join(tmpDir, '.tmpname-jest');
|
||||||
|
|
||||||
jest.spyOn(Context, 'tmpDir').mockImplementation((): string => {
|
jest.spyOn(Context, 'tmpDir').mockImplementation((): string => {
|
||||||
if (!fs.existsSync(tmpDir)) {
|
fs.mkdirSync(tmpDir, {recursive: true});
|
||||||
fs.mkdirSync(tmpDir, {recursive: true});
|
|
||||||
}
|
|
||||||
return tmpDir;
|
return tmpDir;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
344
__tests__/buildkit/git.test.ts
Normal file
344
__tests__/buildkit/git.test.ts
Normal file
@@ -0,0 +1,344 @@
|
|||||||
|
/**
|
||||||
|
* Copyright 2024 actions-toolkit authors
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
import {beforeEach, describe, expect, jest, test} from '@jest/globals';
|
||||||
|
|
||||||
|
import {Git} from '../../src/buildkit/git';
|
||||||
|
|
||||||
|
import {GitRef, GitURL} from '../../src/types/buildkit/git';
|
||||||
|
|
||||||
|
beforeEach(() => {
|
||||||
|
jest.restoreAllMocks();
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('parseURL', () => {
|
||||||
|
// prettier-ignore
|
||||||
|
test.each([
|
||||||
|
[
|
||||||
|
'http://github.com/moby/buildkit',
|
||||||
|
{
|
||||||
|
scheme: 'http',
|
||||||
|
host: 'github.com',
|
||||||
|
path: '/moby/buildkit'
|
||||||
|
} as GitURL,
|
||||||
|
false
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'https://github.com/moby/buildkit',
|
||||||
|
{
|
||||||
|
scheme: 'https',
|
||||||
|
host: 'github.com',
|
||||||
|
path: '/moby/buildkit'
|
||||||
|
} as GitURL,
|
||||||
|
false
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'http://github.com/moby/buildkit#v1.0.0',
|
||||||
|
{
|
||||||
|
scheme: 'http',
|
||||||
|
host: 'github.com',
|
||||||
|
path: '/moby/buildkit',
|
||||||
|
fragment: {
|
||||||
|
ref: 'v1.0.0',
|
||||||
|
}
|
||||||
|
} as GitURL,
|
||||||
|
false
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'http://github.com/moby/buildkit#v1.0.0:subdir',
|
||||||
|
{
|
||||||
|
scheme: 'http',
|
||||||
|
host: 'github.com',
|
||||||
|
path: '/moby/buildkit',
|
||||||
|
fragment: {
|
||||||
|
ref: 'v1.0.0',
|
||||||
|
subdir: 'subdir'
|
||||||
|
}
|
||||||
|
} as GitURL,
|
||||||
|
false
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'http://foo:bar@github.com/moby/buildkit#v1.0.0',
|
||||||
|
{
|
||||||
|
scheme: 'http',
|
||||||
|
host: 'github.com',
|
||||||
|
path: '/moby/buildkit',
|
||||||
|
fragment: {
|
||||||
|
ref: 'v1.0.0',
|
||||||
|
},
|
||||||
|
user: {
|
||||||
|
username: 'foo',
|
||||||
|
password: 'bar',
|
||||||
|
passwordSet: true
|
||||||
|
}
|
||||||
|
} as GitURL,
|
||||||
|
false
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'ssh://git@github.com/moby/buildkit.git',
|
||||||
|
{
|
||||||
|
scheme: 'ssh',
|
||||||
|
host: 'github.com',
|
||||||
|
path: '/moby/buildkit.git',
|
||||||
|
user: {
|
||||||
|
username: 'git',
|
||||||
|
password: '',
|
||||||
|
passwordSet: false
|
||||||
|
}
|
||||||
|
} as GitURL,
|
||||||
|
false
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'ssh://git@github.com:22/moby/buildkit.git',
|
||||||
|
{
|
||||||
|
scheme: 'ssh',
|
||||||
|
host: 'github.com:22',
|
||||||
|
path: '/moby/buildkit.git',
|
||||||
|
user: {
|
||||||
|
username: 'git',
|
||||||
|
password: '',
|
||||||
|
passwordSet: false
|
||||||
|
}
|
||||||
|
} as GitURL,
|
||||||
|
false
|
||||||
|
],
|
||||||
|
// TODO: handle SCP-style URLs
|
||||||
|
// [
|
||||||
|
// 'git@github.com:moby/buildkit.git',
|
||||||
|
// {
|
||||||
|
// scheme: 'ssh',
|
||||||
|
// host: 'github.com:22',
|
||||||
|
// path: 'moby/buildkit.git',
|
||||||
|
// user: {
|
||||||
|
// username: 'git',
|
||||||
|
// password: '',
|
||||||
|
// passwordSet: false
|
||||||
|
// }
|
||||||
|
// } as GitURL,
|
||||||
|
// false
|
||||||
|
// ],
|
||||||
|
[
|
||||||
|
'ssh://root@subdomain.example.hostname:2222/root/my/really/weird/path/foo.git',
|
||||||
|
{
|
||||||
|
scheme: 'ssh',
|
||||||
|
host: 'subdomain.example.hostname:2222',
|
||||||
|
path: '/root/my/really/weird/path/foo.git',
|
||||||
|
user: {
|
||||||
|
username: 'root',
|
||||||
|
password: '',
|
||||||
|
passwordSet: false
|
||||||
|
}
|
||||||
|
} as GitURL,
|
||||||
|
false
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'git://host.xz:1234/path/to/repo.git',
|
||||||
|
{
|
||||||
|
scheme: 'git',
|
||||||
|
host: 'host.xz:1234',
|
||||||
|
path: '/path/to/repo.git',
|
||||||
|
} as GitURL,
|
||||||
|
false
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'ssh://someuser@192.168.0.123:456/~/repo-in-my-home-dir.git',
|
||||||
|
{
|
||||||
|
scheme: 'ssh',
|
||||||
|
host: '192.168.0.123:456',
|
||||||
|
path: '/~/repo-in-my-home-dir.git',
|
||||||
|
user: {
|
||||||
|
username: 'someuser',
|
||||||
|
password: '',
|
||||||
|
passwordSet: false
|
||||||
|
}
|
||||||
|
} as GitURL,
|
||||||
|
false
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'httpx://github.com/moby/buildkit',
|
||||||
|
{} as GitURL,
|
||||||
|
true
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'HTTP://github.com/moby/buildkit',
|
||||||
|
{
|
||||||
|
scheme: 'http',
|
||||||
|
host: 'github.com',
|
||||||
|
path: '/moby/buildkit'
|
||||||
|
} as GitURL,
|
||||||
|
false
|
||||||
|
],
|
||||||
|
])('given %p', async (ref: string, expected: GitURL, expectedErr: boolean) => {
|
||||||
|
try {
|
||||||
|
const got = Git.parseURL(ref);
|
||||||
|
expect(got.scheme).toEqual(expected.scheme);
|
||||||
|
expect(got.host).toEqual(expected.host);
|
||||||
|
expect(got.path).toEqual(expected.path);
|
||||||
|
expect(got.fragment).toEqual(expected.fragment);
|
||||||
|
expect(got.user?.username).toEqual(expected.user?.username);
|
||||||
|
expect(got.user?.password).toEqual(expected.user?.password);
|
||||||
|
expect(got.user?.passwordSet).toEqual(expected.user?.passwordSet);
|
||||||
|
} catch (err) {
|
||||||
|
if (!expectedErr) {
|
||||||
|
console.log(err);
|
||||||
|
}
|
||||||
|
// eslint-disable-next-line jest/no-conditional-expect
|
||||||
|
expect(expectedErr).toBeTruthy();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('parseRef', () => {
|
||||||
|
// prettier-ignore
|
||||||
|
test.each([
|
||||||
|
[
|
||||||
|
'https://example.com/',
|
||||||
|
undefined
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'https://example.com/foo',
|
||||||
|
undefined
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'https://example.com/foo.git',
|
||||||
|
{
|
||||||
|
remote: 'https://example.com/foo.git',
|
||||||
|
shortName: 'foo'
|
||||||
|
} as GitRef
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'https://example.com/foo.git#deadbeef',
|
||||||
|
{
|
||||||
|
remote: 'https://example.com/foo.git',
|
||||||
|
shortName: 'foo',
|
||||||
|
commit: 'deadbeef'
|
||||||
|
} as GitRef
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'https://example.com/foo.git#release/1.2',
|
||||||
|
{
|
||||||
|
remote: 'https://example.com/foo.git',
|
||||||
|
shortName: 'foo',
|
||||||
|
commit: 'release/1.2'
|
||||||
|
} as GitRef
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'https://example.com/foo.git/',
|
||||||
|
undefined
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'https://example.com/foo.git.bar',
|
||||||
|
undefined
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'git://example.com/foo',
|
||||||
|
{
|
||||||
|
remote: 'git://example.com/foo',
|
||||||
|
shortName: 'foo',
|
||||||
|
unencryptedTCP: true
|
||||||
|
} as GitRef
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'github.com/moby/buildkit',
|
||||||
|
{
|
||||||
|
remote: 'github.com/moby/buildkit',
|
||||||
|
shortName: 'buildkit',
|
||||||
|
indistinguishableFromLocal: true
|
||||||
|
} as GitRef
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'custom.xyz/moby/buildkit.git',
|
||||||
|
undefined
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'https://github.com/moby/buildkit',
|
||||||
|
undefined
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'https://github.com/moby/buildkit.git',
|
||||||
|
{
|
||||||
|
remote: 'https://github.com/moby/buildkit.git',
|
||||||
|
shortName: 'buildkit',
|
||||||
|
} as GitRef
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'https://foo:bar@github.com/moby/buildkit.git',
|
||||||
|
{
|
||||||
|
remote: 'https://foo:bar@github.com/moby/buildkit.git',
|
||||||
|
shortName: 'buildkit',
|
||||||
|
} as GitRef
|
||||||
|
],
|
||||||
|
// TODO handle SCP-style URLs
|
||||||
|
// [
|
||||||
|
// 'git@github.com:moby/buildkit',
|
||||||
|
// {
|
||||||
|
// remote: 'git@github.com:moby/buildkit',
|
||||||
|
// shortName: 'buildkit',
|
||||||
|
// } as GitRef
|
||||||
|
// ],
|
||||||
|
// [
|
||||||
|
// 'git@github.com:moby/buildkit.git',
|
||||||
|
// {
|
||||||
|
// remote: 'git@github.com:moby/buildkit',
|
||||||
|
// shortName: 'buildkit',
|
||||||
|
// } as GitRef
|
||||||
|
// ],
|
||||||
|
// [
|
||||||
|
// 'git@bitbucket.org:atlassianlabs/atlassian-docker.git',
|
||||||
|
// {
|
||||||
|
// remote: 'git@bitbucket.org:atlassianlabs/atlassian-docker.git',
|
||||||
|
// shortName: 'atlassian-docker',
|
||||||
|
// } as GitRef
|
||||||
|
// ],
|
||||||
|
[
|
||||||
|
'https://github.com/foo/bar.git#baz/qux:quux/quuz',
|
||||||
|
{
|
||||||
|
remote: 'https://github.com/foo/bar.git',
|
||||||
|
shortName: 'bar',
|
||||||
|
commit: 'baz/qux',
|
||||||
|
subDir: 'quux/quuz',
|
||||||
|
} as GitRef
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'https://github.com/docker/docker.git#:myfolder',
|
||||||
|
{
|
||||||
|
remote: 'https://github.com/docker/docker.git',
|
||||||
|
shortName: 'docker',
|
||||||
|
subDir: 'myfolder',
|
||||||
|
commit: ''
|
||||||
|
} as GitRef
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'./.git',
|
||||||
|
undefined
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'.git',
|
||||||
|
undefined
|
||||||
|
],
|
||||||
|
])('given %p', async (ref: string, expected: GitRef | undefined) => {
|
||||||
|
try {
|
||||||
|
const got = Git.parseRef(ref);
|
||||||
|
expect(got).toEqual(expected);
|
||||||
|
} catch (err) {
|
||||||
|
if (expected) {
|
||||||
|
console.log(err);
|
||||||
|
}
|
||||||
|
// eslint-disable-next-line jest/no-conditional-expect
|
||||||
|
expect(expected).toBeUndefined();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
@@ -21,7 +21,7 @@ import * as path from 'path';
|
|||||||
import {Bake} from '../../src/buildx/bake';
|
import {Bake} from '../../src/buildx/bake';
|
||||||
import {BakeDefinition} from '../../src/types/buildx/bake';
|
import {BakeDefinition} from '../../src/types/buildx/bake';
|
||||||
|
|
||||||
const fixturesDir = path.join(__dirname, '..', 'fixtures');
|
const fixturesDir = path.join(__dirname, '..', '.fixtures');
|
||||||
|
|
||||||
const maybe = !process.env.GITHUB_ACTIONS || (process.env.GITHUB_ACTIONS === 'true' && process.env.ImageOS && process.env.ImageOS.startsWith('ubuntu')) ? describe : describe.skip;
|
const maybe = !process.env.GITHUB_ACTIONS || (process.env.GITHUB_ACTIONS === 'true' && process.env.ImageOS && process.env.ImageOS.startsWith('ubuntu')) ? describe : describe.skip;
|
||||||
|
|
||||||
|
|||||||
@@ -15,33 +15,25 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
import {afterEach, describe, expect, it, jest, test} from '@jest/globals';
|
import {afterEach, describe, expect, it, jest, test} from '@jest/globals';
|
||||||
import * as fs from 'fs';
|
import fs from 'fs';
|
||||||
import * as path from 'path';
|
import os from 'os';
|
||||||
|
import path from 'path';
|
||||||
import * as rimraf from 'rimraf';
|
import * as rimraf from 'rimraf';
|
||||||
|
|
||||||
import {Bake} from '../../src/buildx/bake';
|
import {Bake} from '../../src/buildx/bake';
|
||||||
import {Context} from '../../src/context';
|
import {Context} from '../../src/context';
|
||||||
|
|
||||||
import {ExecOptions} from '@actions/exec';
|
import {ExecOptions} from '@actions/exec';
|
||||||
import {BakeDefinition, BakeMetadata} from '../../src/types/buildx/bake';
|
import {BakeDefinition} from '../../src/types/buildx/bake';
|
||||||
|
import {BuildMetadata} from '../../src/types/buildx/build';
|
||||||
|
|
||||||
const fixturesDir = path.join(__dirname, '..', 'fixtures');
|
const fixturesDir = path.join(__dirname, '..', '.fixtures');
|
||||||
// prettier-ignore
|
const tmpDir = fs.mkdtempSync(path.join(process.env.TEMP || os.tmpdir(), 'buildx-bake-'));
|
||||||
const tmpDir = path.join(process.env.TEMP || '/tmp', 'buildx-inputs-jest');
|
|
||||||
const tmpName = path.join(tmpDir, '.tmpname-jest');
|
const tmpName = path.join(tmpDir, '.tmpname-jest');
|
||||||
const metadata: BakeMetadata = {
|
const metadata = JSON.parse(fs.readFileSync(path.join(fixturesDir, 'metadata-bake.json'), 'utf-8'));
|
||||||
app: {
|
|
||||||
'buildx.build.ref': 'default/default/7frbdw1fmfozgtqavghowsepk'
|
|
||||||
},
|
|
||||||
db: {
|
|
||||||
'buildx.build.ref': 'default/default/onic7g2axylf56rxetob7qruy'
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
jest.spyOn(Context, 'tmpDir').mockImplementation((): string => {
|
jest.spyOn(Context, 'tmpDir').mockImplementation((): string => {
|
||||||
if (!fs.existsSync(tmpDir)) {
|
fs.mkdirSync(tmpDir, {recursive: true});
|
||||||
fs.mkdirSync(tmpDir, {recursive: true});
|
|
||||||
}
|
|
||||||
return tmpDir;
|
return tmpDir;
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -57,7 +49,7 @@ describe('resolveMetadata', () => {
|
|||||||
it('matches', async () => {
|
it('matches', async () => {
|
||||||
const bake = new Bake();
|
const bake = new Bake();
|
||||||
fs.writeFileSync(bake.getMetadataFilePath(), JSON.stringify(metadata));
|
fs.writeFileSync(bake.getMetadataFilePath(), JSON.stringify(metadata));
|
||||||
expect(bake.resolveMetadata()).toEqual(metadata as BakeMetadata);
|
expect(bake.resolveMetadata()).toEqual(metadata as BuildMetadata);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -65,7 +57,17 @@ describe('resolveRefs', () => {
|
|||||||
it('matches', async () => {
|
it('matches', async () => {
|
||||||
const bake = new Bake();
|
const bake = new Bake();
|
||||||
fs.writeFileSync(bake.getMetadataFilePath(), JSON.stringify(metadata));
|
fs.writeFileSync(bake.getMetadataFilePath(), JSON.stringify(metadata));
|
||||||
expect(bake.resolveRefs()).toEqual(['default/default/7frbdw1fmfozgtqavghowsepk', 'default/default/onic7g2axylf56rxetob7qruy']);
|
expect(bake.resolveRefs()).toEqual(['default/default/x3tig9yrbzg2bp0ahn840m9hs', 'default/default/f9i6og3j529lrezk83aw9k8fr', 'default/default/yfq4itxr5kgustkcmp8jr4b9m']);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('resolveWarnings', () => {
|
||||||
|
it('matches', async () => {
|
||||||
|
const bake = new Bake();
|
||||||
|
fs.writeFileSync(bake.getMetadataFilePath(), JSON.stringify(metadata));
|
||||||
|
const warnings = bake.resolveWarnings();
|
||||||
|
expect(warnings).toBeDefined();
|
||||||
|
expect(warnings?.length).toEqual(13);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@@ -15,23 +15,21 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
import {afterEach, beforeEach, describe, expect, it, jest, test} from '@jest/globals';
|
import {afterEach, beforeEach, describe, expect, it, jest, test} from '@jest/globals';
|
||||||
import * as fs from 'fs';
|
import fs from 'fs';
|
||||||
import * as path from 'path';
|
import os from 'os';
|
||||||
|
import path from 'path';
|
||||||
import * as rimraf from 'rimraf';
|
import * as rimraf from 'rimraf';
|
||||||
|
|
||||||
import {Context} from '../../src/context';
|
import {Context} from '../../src/context';
|
||||||
import {Build} from '../../src/buildx/build';
|
import {Build} from '../../src/buildx/build';
|
||||||
|
|
||||||
const fixturesDir = path.join(__dirname, '..', 'fixtures');
|
const fixturesDir = path.join(__dirname, '..', '.fixtures');
|
||||||
// prettier-ignore
|
const tmpDir = fs.mkdtempSync(path.join(process.env.TEMP || os.tmpdir(), 'buildx-build-'));
|
||||||
const tmpDir = path.join(process.env.TEMP || '/tmp', 'buildx-inputs-jest');
|
|
||||||
const tmpName = path.join(tmpDir, '.tmpname-jest');
|
const tmpName = path.join(tmpDir, '.tmpname-jest');
|
||||||
const metadata = JSON.parse(fs.readFileSync(path.join(fixturesDir, 'metadata.json'), 'utf-8'));
|
const metadata = JSON.parse(fs.readFileSync(path.join(fixturesDir, 'metadata-build.json'), 'utf-8'));
|
||||||
|
|
||||||
jest.spyOn(Context, 'tmpDir').mockImplementation((): string => {
|
jest.spyOn(Context, 'tmpDir').mockImplementation((): string => {
|
||||||
if (!fs.existsSync(tmpDir)) {
|
fs.mkdirSync(tmpDir, {recursive: true});
|
||||||
fs.mkdirSync(tmpDir, {recursive: true});
|
|
||||||
}
|
|
||||||
return tmpDir;
|
return tmpDir;
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -80,6 +78,16 @@ describe('resolveProvenance', () => {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
describe('resolveWarnings', () => {
|
||||||
|
it('matches', async () => {
|
||||||
|
const build = new Build();
|
||||||
|
fs.writeFileSync(build.getMetadataFilePath(), JSON.stringify(metadata));
|
||||||
|
const warnings = build.resolveWarnings();
|
||||||
|
expect(warnings).toBeDefined();
|
||||||
|
expect(warnings?.length).toEqual(3);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
describe('resolveDigest', () => {
|
describe('resolveDigest', () => {
|
||||||
it('matches', async () => {
|
it('matches', async () => {
|
||||||
const build = new Build();
|
const build = new Build();
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ import {Exec} from '../../src/exec';
|
|||||||
|
|
||||||
import {BuilderInfo} from '../../src/types/buildx/builder';
|
import {BuilderInfo} from '../../src/types/buildx/builder';
|
||||||
|
|
||||||
const fixturesDir = path.join(__dirname, '..', 'fixtures');
|
const fixturesDir = path.join(__dirname, '..', '.fixtures');
|
||||||
|
|
||||||
jest.spyOn(Builder.prototype, 'inspect').mockImplementation(async (): Promise<BuilderInfo> => {
|
jest.spyOn(Builder.prototype, 'inspect').mockImplementation(async (): Promise<BuilderInfo> => {
|
||||||
return {
|
return {
|
||||||
|
|||||||
116
__tests__/buildx/buildx.test.itg.ts
Normal file
116
__tests__/buildx/buildx.test.itg.ts
Normal file
@@ -0,0 +1,116 @@
|
|||||||
|
/**
|
||||||
|
* Copyright 2024 actions-toolkit authors
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
import {describe, expect, it} from '@jest/globals';
|
||||||
|
import fs from 'fs';
|
||||||
|
import os from 'os';
|
||||||
|
import path from 'path';
|
||||||
|
import * as core from '@actions/core';
|
||||||
|
|
||||||
|
import {Buildx} from '../../src/buildx/buildx';
|
||||||
|
import {Build} from '../../src/buildx/build';
|
||||||
|
import {Bake} from '../../src/buildx/bake';
|
||||||
|
import {Exec} from '../../src/exec';
|
||||||
|
|
||||||
|
const fixturesDir = path.join(__dirname, '..', '.fixtures');
|
||||||
|
const tmpDir = fs.mkdtempSync(path.join(process.env.TEMP || os.tmpdir(), 'buildx-buildx-itg-'));
|
||||||
|
|
||||||
|
const maybe = !process.env.GITHUB_ACTIONS || (process.env.GITHUB_ACTIONS === 'true' && process.env.ImageOS && process.env.ImageOS.startsWith('ubuntu')) ? describe : describe.skip;
|
||||||
|
|
||||||
|
maybe('convertWarningsToGitHubAnnotations', () => {
|
||||||
|
it('build lint issues', async () => {
|
||||||
|
const buildx = new Buildx();
|
||||||
|
const build = new Build({buildx: buildx});
|
||||||
|
|
||||||
|
fs.mkdirSync(tmpDir, {recursive: true});
|
||||||
|
await expect(
|
||||||
|
(async () => {
|
||||||
|
// prettier-ignore
|
||||||
|
const buildCmd = await buildx.getCommand([
|
||||||
|
'--builder', process.env.CTN_BUILDER_NAME ?? 'default',
|
||||||
|
'build',
|
||||||
|
'-f', path.join(fixturesDir, 'lint.Dockerfile'),
|
||||||
|
fixturesDir,
|
||||||
|
'--metadata-file', build.getMetadataFilePath()
|
||||||
|
]);
|
||||||
|
await Exec.exec(buildCmd.command, buildCmd.args, {
|
||||||
|
env: Object.assign({}, process.env, {
|
||||||
|
BUILDX_METADATA_WARNINGS: 'true'
|
||||||
|
}) as {
|
||||||
|
[key: string]: string;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
})()
|
||||||
|
).resolves.not.toThrow();
|
||||||
|
|
||||||
|
const metadata = build.resolveMetadata();
|
||||||
|
expect(metadata).toBeDefined();
|
||||||
|
const buildRef = build.resolveRef(metadata);
|
||||||
|
expect(buildRef).toBeDefined();
|
||||||
|
const buildWarnings = build.resolveWarnings(metadata);
|
||||||
|
expect(buildWarnings).toBeDefined();
|
||||||
|
|
||||||
|
const annotations = await Buildx.convertWarningsToGitHubAnnotations(buildWarnings ?? [], [buildRef ?? '']);
|
||||||
|
expect(annotations).toBeDefined();
|
||||||
|
expect(annotations?.length).toBeGreaterThan(0);
|
||||||
|
|
||||||
|
for (const annotation of annotations ?? []) {
|
||||||
|
core.warning(annotation.message, annotation);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
it('bake lint issues', async () => {
|
||||||
|
const buildx = new Buildx();
|
||||||
|
const bake = new Bake({buildx: buildx});
|
||||||
|
|
||||||
|
fs.mkdirSync(tmpDir, {recursive: true});
|
||||||
|
await expect(
|
||||||
|
(async () => {
|
||||||
|
// prettier-ignore
|
||||||
|
const buildCmd = await buildx.getCommand([
|
||||||
|
'--builder', process.env.CTN_BUILDER_NAME ?? 'default',
|
||||||
|
'bake',
|
||||||
|
'-f', path.join(fixturesDir, 'lint.hcl'),
|
||||||
|
'--metadata-file', bake.getMetadataFilePath()
|
||||||
|
]);
|
||||||
|
await Exec.exec(buildCmd.command, buildCmd.args, {
|
||||||
|
cwd: fixturesDir,
|
||||||
|
env: Object.assign({}, process.env, {
|
||||||
|
BUILDX_METADATA_WARNINGS: 'true'
|
||||||
|
}) as {
|
||||||
|
[key: string]: string;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
})()
|
||||||
|
).resolves.not.toThrow();
|
||||||
|
|
||||||
|
const metadata = bake.resolveMetadata();
|
||||||
|
expect(metadata).toBeDefined();
|
||||||
|
const buildRefs = bake.resolveRefs(metadata);
|
||||||
|
expect(buildRefs).toBeDefined();
|
||||||
|
expect(buildRefs?.length).toEqual(3);
|
||||||
|
const buildWarnings = bake.resolveWarnings(metadata);
|
||||||
|
expect(buildWarnings).toBeDefined();
|
||||||
|
|
||||||
|
const annotations = await Buildx.convertWarningsToGitHubAnnotations(buildWarnings ?? [], buildRefs ?? []);
|
||||||
|
expect(annotations).toBeDefined();
|
||||||
|
expect(annotations?.length).toBeGreaterThan(0);
|
||||||
|
|
||||||
|
for (const annotation of annotations ?? []) {
|
||||||
|
core.warning(annotation.message, annotation);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
@@ -15,8 +15,9 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
import {describe, expect, it, jest, test, beforeEach, afterEach} from '@jest/globals';
|
import {describe, expect, it, jest, test, beforeEach, afterEach} from '@jest/globals';
|
||||||
import * as fs from 'fs';
|
import fs from 'fs';
|
||||||
import * as path from 'path';
|
import os from 'os';
|
||||||
|
import path from 'path';
|
||||||
import * as rimraf from 'rimraf';
|
import * as rimraf from 'rimraf';
|
||||||
import * as semver from 'semver';
|
import * as semver from 'semver';
|
||||||
|
|
||||||
@@ -24,17 +25,14 @@ import {Buildx} from '../../src/buildx/buildx';
|
|||||||
import {Context} from '../../src/context';
|
import {Context} from '../../src/context';
|
||||||
import {Exec} from '../../src/exec';
|
import {Exec} from '../../src/exec';
|
||||||
|
|
||||||
import {Cert} from '../../src/types/buildx/buildx';
|
import {Cert, LocalState} from '../../src/types/buildx/buildx';
|
||||||
|
|
||||||
const fixturesDir = path.join(__dirname, '..', 'fixtures');
|
const fixturesDir = path.join(__dirname, '..', '.fixtures');
|
||||||
// prettier-ignore
|
const tmpDir = fs.mkdtempSync(path.join(process.env.TEMP || os.tmpdir(), 'buildx-buildx-'));
|
||||||
const tmpDir = path.join(process.env.TEMP || '/tmp', 'buildx-jest');
|
|
||||||
const tmpName = path.join(tmpDir, '.tmpname-jest');
|
const tmpName = path.join(tmpDir, '.tmpname-jest');
|
||||||
|
|
||||||
jest.spyOn(Context, 'tmpDir').mockImplementation((): string => {
|
jest.spyOn(Context, 'tmpDir').mockImplementation((): string => {
|
||||||
if (!fs.existsSync(tmpDir)) {
|
fs.mkdirSync(tmpDir, {recursive: true});
|
||||||
fs.mkdirSync(tmpDir, {recursive: true});
|
|
||||||
}
|
|
||||||
return tmpDir;
|
return tmpDir;
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -250,19 +248,77 @@ describe('resolveCertsDriverOpts', () => {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
describe('localState', () => {
|
||||||
|
// prettier-ignore
|
||||||
|
test.each([
|
||||||
|
[
|
||||||
|
'default/default/ij71n3ubmhck85d03zdvye5nr',
|
||||||
|
{
|
||||||
|
LocalPath: '/home/crazymax/github/docker_org/buildx',
|
||||||
|
DockerfilePath: '/home/crazymax/github/docker_org/buildx/Dockerfile'
|
||||||
|
} as LocalState,
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'default/default/7pnnqpgacnqq98oa1a1h5sz6t',
|
||||||
|
{
|
||||||
|
LocalPath: 'https://github.com/docker/actions-toolkit.git#:__tests__/fixtures',
|
||||||
|
DockerfilePath: 'hello.Dockerfile'
|
||||||
|
} as LocalState,
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'default/default/84p2qpgacnqq98oa1a1h5sz6t',
|
||||||
|
{
|
||||||
|
LocalPath: 'https://github.com/docker/actions-toolkit.git#:__tests__/fixtures',
|
||||||
|
DockerfilePath: '-'
|
||||||
|
} as LocalState,
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'default/default/a5s9rlg9cnqq98oa1a1h5sz6t',
|
||||||
|
{
|
||||||
|
LocalPath: '-',
|
||||||
|
DockerfilePath: ''
|
||||||
|
} as LocalState,
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'default/default/aav2ix4nw5eky66fw045dkylr',
|
||||||
|
{
|
||||||
|
LocalPath: 'https://github.com/docker/buildx.git',
|
||||||
|
DockerfilePath: ''
|
||||||
|
} as LocalState,
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'default/default/dfsz8r57a98zf789pmlyzqp3n',
|
||||||
|
{
|
||||||
|
LocalPath: 'https://github.com/docker/actions-toolkit.git#:__tests__/fixtures',
|
||||||
|
DockerfilePath: 'hello.Dockerfile'
|
||||||
|
} as LocalState,
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'default/default/w38vcd5fo5cfvfyig77qjec0v',
|
||||||
|
{
|
||||||
|
LocalPath: '/home/crazy/hello',
|
||||||
|
DockerfilePath: '-'
|
||||||
|
} as LocalState,
|
||||||
|
]
|
||||||
|
])('given %p', async (ref: string, expected: LocalState) => {
|
||||||
|
const localState = Buildx.localState(ref, path.join(fixturesDir, 'buildx-refs'));
|
||||||
|
expect(localState).toEqual(expected);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
describe('refs', () => {
|
describe('refs', () => {
|
||||||
it('returns all refs', async () => {
|
it('returns all refs', async () => {
|
||||||
const refs = Buildx.refs({
|
const refs = Buildx.refs({
|
||||||
dir: path.join(fixturesDir, 'buildx-refs')
|
dir: path.join(fixturesDir, 'buildx-refs')
|
||||||
});
|
});
|
||||||
expect(Object.keys(refs).length).toEqual(11);
|
expect(Object.keys(refs).length).toEqual(17);
|
||||||
});
|
});
|
||||||
it('returns default builder refs', async () => {
|
it('returns default builder refs', async () => {
|
||||||
const refs = Buildx.refs({
|
const refs = Buildx.refs({
|
||||||
dir: path.join(fixturesDir, 'buildx-refs'),
|
dir: path.join(fixturesDir, 'buildx-refs'),
|
||||||
builderName: 'default'
|
builderName: 'default'
|
||||||
});
|
});
|
||||||
expect(Object.keys(refs).length).toEqual(8);
|
expect(Object.keys(refs).length).toEqual(14);
|
||||||
});
|
});
|
||||||
it('returns foo builder refs', async () => {
|
it('returns foo builder refs', async () => {
|
||||||
const refs = Buildx.refs({
|
const refs = Buildx.refs({
|
||||||
@@ -281,6 +337,6 @@ describe('refs', () => {
|
|||||||
builderName: 'default',
|
builderName: 'default',
|
||||||
since: new Date('2024-01-10T00:00:00Z')
|
since: new Date('2024-01-10T00:00:00Z')
|
||||||
});
|
});
|
||||||
expect(Object.keys(refs).length).toEqual(5);
|
expect(Object.keys(refs).length).toEqual(11);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -14,9 +14,10 @@
|
|||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import {describe, expect, test} from '@jest/globals';
|
import {afterEach, beforeEach, describe, expect, it, jest, test} from '@jest/globals';
|
||||||
import * as fs from 'fs';
|
import fs from 'fs';
|
||||||
import * as path from 'path';
|
import os from 'os';
|
||||||
|
import path from 'path';
|
||||||
|
|
||||||
import {Buildx} from '../../src/buildx/buildx';
|
import {Buildx} from '../../src/buildx/buildx';
|
||||||
import {Bake} from '../../src/buildx/bake';
|
import {Bake} from '../../src/buildx/bake';
|
||||||
@@ -24,10 +25,8 @@ import {Build} from '../../src/buildx/build';
|
|||||||
import {History} from '../../src/buildx/history';
|
import {History} from '../../src/buildx/history';
|
||||||
import {Exec} from '../../src/exec';
|
import {Exec} from '../../src/exec';
|
||||||
|
|
||||||
const fixturesDir = path.join(__dirname, '..', 'fixtures');
|
const fixturesDir = path.join(__dirname, '..', '.fixtures');
|
||||||
|
const tmpDir = fs.mkdtempSync(path.join(process.env.TEMP || os.tmpdir(), 'buildx-history-itg-'));
|
||||||
// prettier-ignore
|
|
||||||
const tmpDir = path.join(process.env.TEMP || '/tmp', 'buildx-history-jest');
|
|
||||||
|
|
||||||
const maybe = !process.env.GITHUB_ACTIONS || (process.env.GITHUB_ACTIONS === 'true' && process.env.ImageOS && process.env.ImageOS.startsWith('ubuntu')) ? describe : describe.skip;
|
const maybe = !process.env.GITHUB_ACTIONS || (process.env.GITHUB_ACTIONS === 'true' && process.env.ImageOS && process.env.ImageOS.startsWith('ubuntu')) ? describe : describe.skip;
|
||||||
|
|
||||||
@@ -147,3 +146,52 @@ maybe('exportBuild', () => {
|
|||||||
expect(exportRes?.summaries).toBeDefined();
|
expect(exportRes?.summaries).toBeDefined();
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
maybe('exportBuild custom image', () => {
|
||||||
|
const originalEnv = process.env;
|
||||||
|
beforeEach(() => {
|
||||||
|
jest.resetModules();
|
||||||
|
process.env = {
|
||||||
|
...originalEnv,
|
||||||
|
DOCKER_BUILD_EXPORT_BUILD_IMAGE: 'docker.io/dockereng/export-build:0.2.2'
|
||||||
|
};
|
||||||
|
});
|
||||||
|
afterEach(() => {
|
||||||
|
process.env = originalEnv;
|
||||||
|
});
|
||||||
|
|
||||||
|
it('with custom image', async () => {
|
||||||
|
const buildx = new Buildx();
|
||||||
|
const build = new Build({buildx: buildx});
|
||||||
|
|
||||||
|
fs.mkdirSync(tmpDir, {recursive: true});
|
||||||
|
await expect(
|
||||||
|
(async () => {
|
||||||
|
// prettier-ignore
|
||||||
|
const buildCmd = await buildx.getCommand([
|
||||||
|
'--builder', process.env.CTN_BUILDER_NAME ?? 'default',
|
||||||
|
'build', '-f', path.join(fixturesDir, 'hello.Dockerfile'),
|
||||||
|
'--metadata-file', build.getMetadataFilePath(),
|
||||||
|
fixturesDir
|
||||||
|
]);
|
||||||
|
await Exec.exec(buildCmd.command, buildCmd.args);
|
||||||
|
})()
|
||||||
|
).resolves.not.toThrow();
|
||||||
|
|
||||||
|
const metadata = build.resolveMetadata();
|
||||||
|
expect(metadata).toBeDefined();
|
||||||
|
const buildRef = build.resolveRef(metadata);
|
||||||
|
expect(buildRef).toBeDefined();
|
||||||
|
|
||||||
|
const history = new History({buildx: buildx});
|
||||||
|
const exportRes = await history.export({
|
||||||
|
refs: [buildRef ?? '']
|
||||||
|
});
|
||||||
|
|
||||||
|
expect(exportRes).toBeDefined();
|
||||||
|
expect(exportRes?.dockerbuildFilename).toBeDefined();
|
||||||
|
expect(exportRes?.dockerbuildSize).toBeDefined();
|
||||||
|
expect(fs.existsSync(exportRes?.dockerbuildFilename)).toBe(true);
|
||||||
|
expect(exportRes?.summaries).toBeDefined();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|||||||
@@ -15,15 +15,15 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
import {describe, expect, it, jest, test, afterEach} from '@jest/globals';
|
import {describe, expect, it, jest, test, afterEach} from '@jest/globals';
|
||||||
import * as fs from 'fs';
|
import fs from 'fs';
|
||||||
import * as path from 'path';
|
import os from 'os';
|
||||||
|
import path from 'path';
|
||||||
import * as rimraf from 'rimraf';
|
import * as rimraf from 'rimraf';
|
||||||
import osm = require('os');
|
import osm = require('os');
|
||||||
|
|
||||||
import {Install} from '../../src/buildx/install';
|
import {Install} from '../../src/buildx/install';
|
||||||
|
|
||||||
// prettier-ignore
|
const tmpDir = fs.mkdtempSync(path.join(process.env.TEMP || os.tmpdir(), 'buildx-install-'));
|
||||||
const tmpDir = path.join(process.env.TEMP || '/tmp', 'buildx-jest');
|
|
||||||
|
|
||||||
afterEach(function () {
|
afterEach(function () {
|
||||||
rimraf.sync(tmpDir);
|
rimraf.sync(tmpDir);
|
||||||
|
|||||||
@@ -14,15 +14,15 @@
|
|||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import path from 'path';
|
|
||||||
import {describe, expect, it} from '@jest/globals';
|
import {describe, expect, it} from '@jest/globals';
|
||||||
|
import fs from 'fs';
|
||||||
|
import os from 'os';
|
||||||
|
import path from 'path';
|
||||||
|
|
||||||
import {Cache} from '../src/cache';
|
import {Cache} from '../src/cache';
|
||||||
|
|
||||||
// prettier-ignore
|
const fixturesDir = path.join(__dirname, '.fixtures');
|
||||||
const tmpDir = path.join(process.env.TEMP || '/tmp', 'cache-jest');
|
const tmpDir = fs.mkdtempSync(path.join(process.env.TEMP || os.tmpdir(), 'cache-itg-'));
|
||||||
|
|
||||||
const fixturesDir = path.join(__dirname, 'fixtures');
|
|
||||||
|
|
||||||
describe('cache', () => {
|
describe('cache', () => {
|
||||||
it('github-repo', async () => {
|
it('github-repo', async () => {
|
||||||
|
|||||||
@@ -14,21 +14,19 @@
|
|||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import * as fs from 'fs';
|
|
||||||
import * as path from 'path';
|
|
||||||
import * as rimraf from 'rimraf';
|
|
||||||
import {describe, expect, jest, it, afterEach} from '@jest/globals';
|
import {describe, expect, jest, it, afterEach} from '@jest/globals';
|
||||||
|
import fs from 'fs';
|
||||||
|
import os from 'os';
|
||||||
|
import path from 'path';
|
||||||
|
import * as rimraf from 'rimraf';
|
||||||
|
|
||||||
import {Context} from '../src/context';
|
import {Context} from '../src/context';
|
||||||
|
|
||||||
// prettier-ignore
|
const tmpDir = fs.mkdtempSync(path.join(process.env.TEMP || os.tmpdir(), 'context-'));
|
||||||
const tmpDir = path.join(process.env.TEMP || '/tmp', 'context-jest');
|
|
||||||
const tmpName = path.join(tmpDir, '.tmpname-jest');
|
const tmpName = path.join(tmpDir, '.tmpname-jest');
|
||||||
|
|
||||||
jest.spyOn(Context, 'tmpDir').mockImplementation((): string => {
|
jest.spyOn(Context, 'tmpDir').mockImplementation((): string => {
|
||||||
if (!fs.existsSync(tmpDir)) {
|
fs.mkdirSync(tmpDir, {recursive: true});
|
||||||
fs.mkdirSync(tmpDir, {recursive: true});
|
|
||||||
}
|
|
||||||
return tmpDir;
|
return tmpDir;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@@ -14,12 +14,18 @@
|
|||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import {describe, expect, test} from '@jest/globals';
|
import {describe, expect, it, test} from '@jest/globals';
|
||||||
|
|
||||||
import {Docker} from '../../src/docker/docker';
|
import {Docker} from '../../src/docker/docker';
|
||||||
|
|
||||||
const maybe = !process.env.GITHUB_ACTIONS || (process.env.GITHUB_ACTIONS === 'true' && process.env.ImageOS && process.env.ImageOS.startsWith('ubuntu')) ? describe : describe.skip;
|
const maybe = !process.env.GITHUB_ACTIONS || (process.env.GITHUB_ACTIONS === 'true' && process.env.ImageOS && process.env.ImageOS.startsWith('ubuntu')) ? describe : describe.skip;
|
||||||
|
|
||||||
|
maybe('isDaemonRunning', () => {
|
||||||
|
it('checks if daemon is running', async () => {
|
||||||
|
expect(await Docker.isDaemonRunning()).toBe(true);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
maybe('pull', () => {
|
maybe('pull', () => {
|
||||||
// prettier-ignore
|
// prettier-ignore
|
||||||
test.each([
|
test.each([
|
||||||
@@ -54,3 +60,14 @@ maybe('pull', () => {
|
|||||||
}
|
}
|
||||||
}, 600000);
|
}, 600000);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
maybe('contextInspect', () => {
|
||||||
|
it('inspect default context', async () => {
|
||||||
|
const contextInfo = await Docker.contextInspect();
|
||||||
|
expect(contextInfo).toBeDefined();
|
||||||
|
console.log('contextInfo', contextInfo);
|
||||||
|
expect(contextInfo?.Name).toBeDefined();
|
||||||
|
expect(contextInfo?.Endpoints).toBeDefined();
|
||||||
|
expect(Object.keys(contextInfo?.Endpoints).length).toBeGreaterThan(0);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|||||||
@@ -15,21 +15,19 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
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 fs from 'fs';
|
||||||
|
import os from 'os';
|
||||||
import path from 'path';
|
import path from 'path';
|
||||||
import * as io from '@actions/io';
|
import * as io from '@actions/io';
|
||||||
import osm = require('os');
|
import osm = require('os');
|
||||||
import * as rimraf from 'rimraf';
|
import * as rimraf from 'rimraf';
|
||||||
|
|
||||||
import {Docker} from '../../src/docker/docker';
|
import {Docker} from '../../src/docker/docker';
|
||||||
import {Exec} from '../../src/exec';
|
|
||||||
|
|
||||||
import {ConfigFile} from '../../src/types/docker/docker';
|
import {ConfigFile} from '../../src/types/docker/docker';
|
||||||
|
|
||||||
const fixturesDir = path.join(__dirname, '..', 'fixtures');
|
const fixturesDir = path.join(__dirname, '..', '.fixtures');
|
||||||
|
const tmpDir = fs.mkdtempSync(path.join(process.env.TEMP || os.tmpdir(), 'docker-docker-'));
|
||||||
// prettier-ignore
|
|
||||||
const tmpDir = path.join(process.env.TEMP || '/tmp', 'docker-jest');
|
|
||||||
|
|
||||||
afterEach(function () {
|
afterEach(function () {
|
||||||
rimraf.sync(tmpDir);
|
rimraf.sync(tmpDir);
|
||||||
@@ -105,35 +103,132 @@ describe('isAvailable', () => {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('context', () => {
|
describe('exec', () => {
|
||||||
it('call docker context show', async () => {
|
it('returns docker version', async () => {
|
||||||
const execSpy = jest.spyOn(Exec, 'getExecOutput');
|
const execSpy = jest.spyOn(Docker, 'exec');
|
||||||
await Docker.context().catch(() => {
|
await Docker.exec(['version'], {
|
||||||
// noop
|
|
||||||
});
|
|
||||||
expect(execSpy).toHaveBeenCalledWith(`docker`, ['context', 'inspect', '--format', '{{.Name}}'], {
|
|
||||||
ignoreReturnCode: true,
|
ignoreReturnCode: true,
|
||||||
silent: true
|
silent: true
|
||||||
});
|
});
|
||||||
|
expect(execSpy).toHaveBeenCalledTimes(1);
|
||||||
|
const callfunc = execSpy.mock.calls[0];
|
||||||
|
expect(Object.keys(callfunc[1]?.env || {}).length).toBeGreaterThan(0);
|
||||||
|
const env = callfunc[1]?.env;
|
||||||
|
expect(env).toHaveProperty('DOCKER_CONTENT_TRUST');
|
||||||
|
expect(env?.DOCKER_CONTENT_TRUST).toBe('false');
|
||||||
|
if (callfunc[1]?.env) {
|
||||||
|
// already checked env
|
||||||
|
callfunc[1].env = undefined;
|
||||||
|
}
|
||||||
|
expect(callfunc).toEqual([
|
||||||
|
['version'],
|
||||||
|
{
|
||||||
|
ignoreReturnCode: true,
|
||||||
|
silent: true
|
||||||
|
}
|
||||||
|
]);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('getExecOutput', () => {
|
||||||
|
it('returns docker version', async () => {
|
||||||
|
const execSpy = jest.spyOn(Docker, 'getExecOutput');
|
||||||
|
await Docker.getExecOutput(['version'], {
|
||||||
|
ignoreReturnCode: true,
|
||||||
|
silent: true
|
||||||
|
});
|
||||||
|
expect(execSpy).toHaveBeenCalledTimes(1);
|
||||||
|
const callfunc = execSpy.mock.calls[0];
|
||||||
|
expect(Object.keys(callfunc[1]?.env || {}).length).toBeGreaterThan(0);
|
||||||
|
const env = callfunc[1]?.env;
|
||||||
|
expect(env).toHaveProperty('DOCKER_CONTENT_TRUST');
|
||||||
|
expect(env?.DOCKER_CONTENT_TRUST).toBe('false');
|
||||||
|
if (callfunc[1]?.env) {
|
||||||
|
// already checked env
|
||||||
|
callfunc[1].env = undefined;
|
||||||
|
}
|
||||||
|
expect(callfunc).toEqual([
|
||||||
|
['version'],
|
||||||
|
{
|
||||||
|
ignoreReturnCode: true,
|
||||||
|
silent: true
|
||||||
|
}
|
||||||
|
]);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('context', () => {
|
||||||
|
it('call docker context show', async () => {
|
||||||
|
const execSpy = jest.spyOn(Docker, 'getExecOutput');
|
||||||
|
await Docker.context().catch(() => {
|
||||||
|
// noop
|
||||||
|
});
|
||||||
|
expect(execSpy).toHaveBeenCalledTimes(1);
|
||||||
|
const callfunc = execSpy.mock.calls[0];
|
||||||
|
if (callfunc && callfunc[1]) {
|
||||||
|
// we don't want to check env opt
|
||||||
|
callfunc[1].env = undefined;
|
||||||
|
}
|
||||||
|
expect(callfunc).toEqual([
|
||||||
|
['context', 'inspect', '--format', '{{.Name}}'],
|
||||||
|
{
|
||||||
|
ignoreReturnCode: true,
|
||||||
|
silent: true
|
||||||
|
}
|
||||||
|
]);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('contextInspect', () => {
|
||||||
|
it('call docker context inspect', async () => {
|
||||||
|
const execSpy = jest.spyOn(Docker, 'getExecOutput');
|
||||||
|
await Docker.contextInspect('foo').catch(() => {
|
||||||
|
// noop
|
||||||
|
});
|
||||||
|
expect(execSpy).toHaveBeenCalledTimes(1);
|
||||||
|
const callfunc = execSpy.mock.calls[0];
|
||||||
|
if (callfunc && callfunc[1]) {
|
||||||
|
// we don't want to check env opt
|
||||||
|
callfunc[1].env = undefined;
|
||||||
|
}
|
||||||
|
expect(callfunc).toEqual([
|
||||||
|
['context', 'inspect', '--format=json', 'foo'],
|
||||||
|
{
|
||||||
|
ignoreReturnCode: true,
|
||||||
|
silent: true
|
||||||
|
}
|
||||||
|
]);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('printVersion', () => {
|
describe('printVersion', () => {
|
||||||
it('call docker version', async () => {
|
it('call docker version', async () => {
|
||||||
const execSpy = jest.spyOn(Exec, 'exec');
|
const execSpy = jest.spyOn(Docker, 'exec');
|
||||||
await Docker.printVersion().catch(() => {
|
await Docker.printVersion().catch(() => {
|
||||||
// noop
|
// noop
|
||||||
});
|
});
|
||||||
expect(execSpy).toHaveBeenCalledWith(`docker`, ['version']);
|
expect(execSpy).toHaveBeenCalledTimes(1);
|
||||||
|
const callfunc = execSpy.mock.calls[0];
|
||||||
|
if (callfunc && callfunc[1]) {
|
||||||
|
// we don't want to check env opt
|
||||||
|
callfunc[1].env = undefined;
|
||||||
|
}
|
||||||
|
expect(callfunc).toEqual([['version']]);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('printInfo', () => {
|
describe('printInfo', () => {
|
||||||
it('call docker info', async () => {
|
it('call docker info', async () => {
|
||||||
const execSpy = jest.spyOn(Exec, 'exec');
|
const execSpy = jest.spyOn(Docker, 'exec');
|
||||||
await Docker.printInfo().catch(() => {
|
await Docker.printInfo().catch(() => {
|
||||||
// noop
|
// noop
|
||||||
});
|
});
|
||||||
expect(execSpy).toHaveBeenCalledWith(`docker`, ['info']);
|
expect(execSpy).toHaveBeenCalledTimes(1);
|
||||||
|
const callfunc = execSpy.mock.calls[0];
|
||||||
|
if (callfunc && callfunc[1]) {
|
||||||
|
// we don't want to check env opt
|
||||||
|
callfunc[1].env = undefined;
|
||||||
|
}
|
||||||
|
expect(callfunc).toEqual([['info']]);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -14,15 +14,16 @@
|
|||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import path from 'path';
|
|
||||||
import {jest, describe, expect, test, beforeEach, afterEach} from '@jest/globals';
|
import {jest, describe, expect, test, beforeEach, afterEach} from '@jest/globals';
|
||||||
|
import fs from 'fs';
|
||||||
|
import os from 'os';
|
||||||
|
import path from 'path';
|
||||||
|
|
||||||
import {Install} from '../../src/docker/install';
|
import {Install} from '../../src/docker/install';
|
||||||
import {Docker} from '../../src/docker/docker';
|
import {Docker} from '../../src/docker/docker';
|
||||||
import {Exec} from '../../src/exec';
|
import {Exec} from '../../src/exec';
|
||||||
|
|
||||||
// prettier-ignore
|
const tmpDir = fs.mkdtempSync(path.join(process.env.TEMP || os.tmpdir(), 'docker-install-itg-'));
|
||||||
const tmpDir = path.join(process.env.TEMP || '/tmp', 'docker-install-jest');
|
|
||||||
|
|
||||||
describe('install', () => {
|
describe('install', () => {
|
||||||
const originalEnv = process.env;
|
const originalEnv = process.env;
|
||||||
|
|||||||
@@ -15,15 +15,15 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
import {describe, expect, jest, test, beforeEach, afterEach, it} from '@jest/globals';
|
import {describe, expect, jest, test, beforeEach, afterEach, it} from '@jest/globals';
|
||||||
import * as fs from 'fs';
|
import fs from 'fs';
|
||||||
import * as path from 'path';
|
import os from 'os';
|
||||||
|
import path from 'path';
|
||||||
import * as rimraf from 'rimraf';
|
import * as rimraf from 'rimraf';
|
||||||
import osm = require('os');
|
import osm = require('os');
|
||||||
|
|
||||||
import {Install} from '../../src/docker/install';
|
import {Install} from '../../src/docker/install';
|
||||||
|
|
||||||
// prettier-ignore
|
const tmpDir = fs.mkdtempSync(path.join(process.env.TEMP || os.tmpdir(), 'docker-install-'));
|
||||||
const tmpDir = path.join(process.env.TEMP || '/tmp', 'docker-install-jest');
|
|
||||||
|
|
||||||
afterEach(function () {
|
afterEach(function () {
|
||||||
rimraf.sync(tmpDir);
|
rimraf.sync(tmpDir);
|
||||||
|
|||||||
@@ -21,9 +21,9 @@ import * as path from 'path';
|
|||||||
import {DockerHub} from '../src/dockerhub';
|
import {DockerHub} from '../src/dockerhub';
|
||||||
import {RepositoryResponse, RepositoryTagsResponse} from '../src/types/dockerhub';
|
import {RepositoryResponse, RepositoryTagsResponse} from '../src/types/dockerhub';
|
||||||
|
|
||||||
import repoInfoFixture from './fixtures/dockerhub-repoinfo.json';
|
import repoInfoFixture from './.fixtures/dockerhub-repoinfo.json';
|
||||||
import repoTagsFixture from './fixtures/dockerhub-repotags.json';
|
import repoTagsFixture from './.fixtures/dockerhub-repotags.json';
|
||||||
import repoAllTagsFixture from './fixtures/dockerhub-repoalltags.json';
|
import repoAllTagsFixture from './.fixtures/dockerhub-repoalltags.json';
|
||||||
|
|
||||||
describe('getRepository', () => {
|
describe('getRepository', () => {
|
||||||
it('returns repo info', async () => {
|
it('returns repo info', async () => {
|
||||||
|
|||||||
@@ -1,45 +0,0 @@
|
|||||||
{
|
|
||||||
"buildx.build.provenance": {
|
|
||||||
"buildType": "https://mobyproject.org/buildkit@v1",
|
|
||||||
"materials": [
|
|
||||||
{
|
|
||||||
"uri": "pkg:docker/docker/dockerfile-upstream@master",
|
|
||||||
"digest": {
|
|
||||||
"sha256": "70433342168dafa34d11bd7236c3c3fcf448b90539733281711050808f32e835"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"uri": "pkg:docker/busybox@latest?platform=linux%2Famd64",
|
|
||||||
"digest": {
|
|
||||||
"sha256": "9ae97d36d26566ff84e8893c64a6dc4fe8ca6d1144bf5b87b2b85a32def253c7"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"invocation": {
|
|
||||||
"configSource": {
|
|
||||||
"entryPoint": "Dockerfile"
|
|
||||||
},
|
|
||||||
"parameters": {
|
|
||||||
"frontend": "gateway.v0",
|
|
||||||
"args": {
|
|
||||||
"cmdline": "docker/dockerfile-upstream:master",
|
|
||||||
"source": "docker/dockerfile-upstream:master"
|
|
||||||
},
|
|
||||||
"locals": [
|
|
||||||
{
|
|
||||||
"name": "context"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "dockerfile"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"environment": {
|
|
||||||
"platform": "linux/amd64"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"buildx.build.ref": "default/default/n6ibcp9b2pw108rrz7ywdznvo",
|
|
||||||
"containerimage.config.digest": "sha256:059b68a595b22564a1cbc167f369349fdc2ecc1f7bc092c2235cbf601a795fd",
|
|
||||||
"containerimage.digest": "sha256:b09b9482c72371486bb2c1d2c2a2633ed1d0b8389e12c8d52b9e052725c0c83c"
|
|
||||||
}
|
|
||||||
@@ -16,7 +16,8 @@
|
|||||||
|
|
||||||
import {describe, expect, it, test} from '@jest/globals';
|
import {describe, expect, it, test} from '@jest/globals';
|
||||||
import fs from 'fs';
|
import fs from 'fs';
|
||||||
import * as path from 'path';
|
import os from 'os';
|
||||||
|
import path from 'path';
|
||||||
|
|
||||||
import {Buildx} from '../src/buildx/buildx';
|
import {Buildx} from '../src/buildx/buildx';
|
||||||
import {Bake} from '../src/buildx/bake';
|
import {Bake} from '../src/buildx/bake';
|
||||||
@@ -25,10 +26,8 @@ import {Exec} from '../src/exec';
|
|||||||
import {GitHub} from '../src/github';
|
import {GitHub} from '../src/github';
|
||||||
import {History} from '../src/buildx/history';
|
import {History} from '../src/buildx/history';
|
||||||
|
|
||||||
const fixturesDir = path.join(__dirname, 'fixtures');
|
const fixturesDir = path.join(__dirname, '.fixtures');
|
||||||
|
const tmpDir = fs.mkdtempSync(path.join(process.env.TEMP || os.tmpdir(), 'github-itg-'));
|
||||||
// prettier-ignore
|
|
||||||
const tmpDir = path.join(process.env.TEMP || '/tmp', 'github-jest');
|
|
||||||
|
|
||||||
const maybe = !process.env.GITHUB_ACTIONS || (process.env.GITHUB_ACTIONS === 'true' && process.env.ImageOS && process.env.ImageOS.startsWith('ubuntu')) ? describe : describe.skip;
|
const maybe = !process.env.GITHUB_ACTIONS || (process.env.GITHUB_ACTIONS === 'true' && process.env.ImageOS && process.env.ImageOS.startsWith('ubuntu')) ? describe : describe.skip;
|
||||||
|
|
||||||
@@ -118,29 +117,20 @@ maybe('writeBuildSummary', () => {
|
|||||||
test.each([
|
test.each([
|
||||||
[
|
[
|
||||||
'single',
|
'single',
|
||||||
[
|
path.join(fixturesDir, 'hello-bake.hcl'),
|
||||||
'bake',
|
'hello'
|
||||||
'-f', path.join(fixturesDir, 'hello-bake.hcl'),
|
|
||||||
'hello'
|
|
||||||
],
|
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
'group',
|
'group',
|
||||||
[
|
path.join(fixturesDir, 'hello-bake.hcl'),
|
||||||
'bake',
|
'hello-all'
|
||||||
'-f', path.join(fixturesDir, 'hello-bake.hcl'),
|
|
||||||
'hello-all'
|
|
||||||
],
|
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
'matrix',
|
'matrix',
|
||||||
[
|
path.join(fixturesDir, 'hello-bake.hcl'),
|
||||||
'bake',
|
'hello-matrix'
|
||||||
'-f', path.join(fixturesDir, 'hello-bake.hcl'),
|
|
||||||
'hello-matrix'
|
|
||||||
],
|
|
||||||
]
|
]
|
||||||
])('write bake summary %p', async (_, bargs) => {
|
])('write bake summary %p', async (_, file, target) => {
|
||||||
const buildx = new Buildx();
|
const buildx = new Buildx();
|
||||||
const bake = new Bake({buildx: buildx});
|
const bake = new Bake({buildx: buildx});
|
||||||
|
|
||||||
@@ -150,7 +140,9 @@ maybe('writeBuildSummary', () => {
|
|||||||
// prettier-ignore
|
// prettier-ignore
|
||||||
const buildCmd = await buildx.getCommand([
|
const buildCmd = await buildx.getCommand([
|
||||||
'--builder', process.env.CTN_BUILDER_NAME ?? 'default',
|
'--builder', process.env.CTN_BUILDER_NAME ?? 'default',
|
||||||
...bargs,
|
'bake',
|
||||||
|
'-f', file,
|
||||||
|
target,
|
||||||
'--metadata-file', bake.getMetadataFilePath()
|
'--metadata-file', bake.getMetadataFilePath()
|
||||||
]);
|
]);
|
||||||
await Exec.exec(buildCmd.command, buildCmd.args, {
|
await Exec.exec(buildCmd.command, buildCmd.args, {
|
||||||
@@ -159,6 +151,16 @@ maybe('writeBuildSummary', () => {
|
|||||||
})()
|
})()
|
||||||
).resolves.not.toThrow();
|
).resolves.not.toThrow();
|
||||||
|
|
||||||
|
const definition = await bake.getDefinition(
|
||||||
|
{
|
||||||
|
files: [file],
|
||||||
|
targets: [target],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
cwd: fixturesDir
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
const metadata = bake.resolveMetadata();
|
const metadata = bake.resolveMetadata();
|
||||||
expect(metadata).toBeDefined();
|
expect(metadata).toBeDefined();
|
||||||
const buildRefs = bake.resolveRefs(metadata);
|
const buildRefs = bake.resolveRefs(metadata);
|
||||||
@@ -186,6 +188,108 @@ maybe('writeBuildSummary', () => {
|
|||||||
uploadRes: uploadRes,
|
uploadRes: uploadRes,
|
||||||
inputs: {
|
inputs: {
|
||||||
files: path.join(fixturesDir, 'hello-bake.hcl')
|
files: path.join(fixturesDir, 'hello-bake.hcl')
|
||||||
|
},
|
||||||
|
bakeDefinition: definition
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
it('fails with dockerfile syntax issue', async () => {
|
||||||
|
const startedTime = new Date();
|
||||||
|
const buildx = new Buildx();
|
||||||
|
const build = new Build({buildx: buildx});
|
||||||
|
|
||||||
|
fs.mkdirSync(tmpDir, {recursive: true});
|
||||||
|
await expect(
|
||||||
|
(async () => {
|
||||||
|
// prettier-ignore
|
||||||
|
const buildCmd = await buildx.getCommand([
|
||||||
|
'--builder', process.env.CTN_BUILDER_NAME ?? 'default',
|
||||||
|
'build',
|
||||||
|
'-f', path.join(fixturesDir, 'hello-err.Dockerfile'),
|
||||||
|
fixturesDir,
|
||||||
|
'--metadata-file', build.getMetadataFilePath()
|
||||||
|
]);
|
||||||
|
await Exec.exec(buildCmd.command, buildCmd.args);
|
||||||
|
})()
|
||||||
|
).rejects.toThrow();
|
||||||
|
|
||||||
|
const refs = Buildx.refs({
|
||||||
|
dir: Buildx.refsDir,
|
||||||
|
builderName: process.env.CTN_BUILDER_NAME ?? 'default',
|
||||||
|
since: startedTime
|
||||||
|
});
|
||||||
|
expect(refs).toBeDefined();
|
||||||
|
expect(Object.keys(refs).length).toBeGreaterThan(0);
|
||||||
|
|
||||||
|
const history = new History({buildx: buildx});
|
||||||
|
const exportRes = await history.export({
|
||||||
|
refs: [Object.keys(refs)[0] ?? '']
|
||||||
|
});
|
||||||
|
expect(exportRes).toBeDefined();
|
||||||
|
expect(exportRes?.dockerbuildFilename).toBeDefined();
|
||||||
|
expect(exportRes?.dockerbuildSize).toBeDefined();
|
||||||
|
expect(exportRes?.summaries).toBeDefined();
|
||||||
|
|
||||||
|
const uploadRes = await GitHub.uploadArtifact({
|
||||||
|
filename: exportRes?.dockerbuildFilename,
|
||||||
|
mimeType: 'application/gzip',
|
||||||
|
retentionDays: 1
|
||||||
|
});
|
||||||
|
expect(uploadRes).toBeDefined();
|
||||||
|
expect(uploadRes?.url).toBeDefined();
|
||||||
|
|
||||||
|
await GitHub.writeBuildSummary({
|
||||||
|
exportRes: exportRes,
|
||||||
|
uploadRes: uploadRes,
|
||||||
|
inputs: {
|
||||||
|
context: fixturesDir,
|
||||||
|
file: path.join(fixturesDir, 'hello-err.Dockerfile')
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
it('without build record', async () => {
|
||||||
|
const startedTime = new Date();
|
||||||
|
const buildx = new Buildx();
|
||||||
|
const build = new Build({buildx: buildx});
|
||||||
|
|
||||||
|
fs.mkdirSync(tmpDir, {recursive: true});
|
||||||
|
await expect(
|
||||||
|
(async () => {
|
||||||
|
// prettier-ignore
|
||||||
|
const buildCmd = await buildx.getCommand([
|
||||||
|
'--builder', process.env.CTN_BUILDER_NAME ?? 'default',
|
||||||
|
'build',
|
||||||
|
'-f', path.join(fixturesDir, 'hello.Dockerfile'),
|
||||||
|
fixturesDir,
|
||||||
|
'--metadata-file', build.getMetadataFilePath()
|
||||||
|
]);
|
||||||
|
await Exec.exec(buildCmd.command, buildCmd.args);
|
||||||
|
})()
|
||||||
|
).resolves.not.toThrow();
|
||||||
|
|
||||||
|
const refs = Buildx.refs({
|
||||||
|
dir: Buildx.refsDir,
|
||||||
|
builderName: process.env.CTN_BUILDER_NAME ?? 'default',
|
||||||
|
since: startedTime
|
||||||
|
});
|
||||||
|
expect(refs).toBeDefined();
|
||||||
|
expect(Object.keys(refs).length).toBeGreaterThan(0);
|
||||||
|
|
||||||
|
const history = new History({buildx: buildx});
|
||||||
|
const exportRes = await history.export({
|
||||||
|
refs: [Object.keys(refs)[0] ?? '']
|
||||||
|
});
|
||||||
|
expect(exportRes).toBeDefined();
|
||||||
|
expect(exportRes?.dockerbuildFilename).toBeDefined();
|
||||||
|
expect(exportRes?.dockerbuildSize).toBeDefined();
|
||||||
|
expect(exportRes?.summaries).toBeDefined();
|
||||||
|
|
||||||
|
await GitHub.writeBuildSummary({
|
||||||
|
exportRes: exportRes,
|
||||||
|
inputs: {
|
||||||
|
context: fixturesDir,
|
||||||
|
file: path.join(fixturesDir, 'hello.Dockerfile')
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ import * as core from '@actions/core';
|
|||||||
import {GitHub} from '../src/github';
|
import {GitHub} from '../src/github';
|
||||||
import {GitHubRepo} from '../src/types/github';
|
import {GitHubRepo} from '../src/types/github';
|
||||||
|
|
||||||
import repoFixture from './fixtures/github-repo.json';
|
import repoFixture from './.fixtures/github-repo.json';
|
||||||
jest.spyOn(GitHub.prototype, 'repoData').mockImplementation((): Promise<GitHubRepo> => {
|
jest.spyOn(GitHub.prototype, 'repoData').mockImplementation((): Promise<GitHubRepo> => {
|
||||||
return <Promise<GitHubRepo>>(repoFixture as unknown);
|
return <Promise<GitHubRepo>>(repoFixture as unknown);
|
||||||
});
|
});
|
||||||
@@ -123,7 +123,7 @@ describe('actionsRuntimeToken', () => {
|
|||||||
});
|
});
|
||||||
it('fixture', async () => {
|
it('fixture', async () => {
|
||||||
process.env.ACTIONS_RUNTIME_TOKEN = fs
|
process.env.ACTIONS_RUNTIME_TOKEN = fs
|
||||||
.readFileSync(path.join(__dirname, 'fixtures', 'runtimeToken.txt'))
|
.readFileSync(path.join(__dirname, '.fixtures', 'runtimeToken.txt'))
|
||||||
.toString()
|
.toString()
|
||||||
.trim();
|
.trim();
|
||||||
const runtimeToken = GitHub.actionsRuntimeToken;
|
const runtimeToken = GitHub.actionsRuntimeToken;
|
||||||
@@ -154,7 +154,7 @@ 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
|
process.env.ACTIONS_RUNTIME_TOKEN = fs
|
||||||
.readFileSync(path.join(__dirname, 'fixtures', 'runtimeToken.txt'))
|
.readFileSync(path.join(__dirname, '.fixtures', 'runtimeToken.txt'))
|
||||||
.toString()
|
.toString()
|
||||||
.trim();
|
.trim();
|
||||||
await GitHub.printActionsRuntimeTokenACs();
|
await GitHub.printActionsRuntimeTokenACs();
|
||||||
|
|||||||
@@ -15,16 +15,15 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
import {afterEach, describe, expect, test} from '@jest/globals';
|
import {afterEach, describe, expect, test} from '@jest/globals';
|
||||||
import * as fs from 'fs';
|
import fs from 'fs';
|
||||||
|
import os from 'os';
|
||||||
import path from 'path';
|
import path from 'path';
|
||||||
import * as rimraf from 'rimraf';
|
import * as rimraf from 'rimraf';
|
||||||
|
|
||||||
import {OCI} from '../../src/oci/oci';
|
import {OCI} from '../../src/oci/oci';
|
||||||
|
|
||||||
const fixturesDir = path.join(__dirname, '..', 'fixtures');
|
const fixturesDir = path.join(__dirname, '..', '.fixtures');
|
||||||
|
const tmpDir = fs.mkdtempSync(path.join(process.env.TEMP || os.tmpdir(), 'oci-oci-'));
|
||||||
// prettier-ignore
|
|
||||||
const tmpDir = path.join(process.env.TEMP || '/tmp', 'docker-jest');
|
|
||||||
|
|
||||||
afterEach(function () {
|
afterEach(function () {
|
||||||
rimraf.sync(tmpDir);
|
rimraf.sync(tmpDir);
|
||||||
|
|||||||
@@ -165,7 +165,7 @@ FOO=bar`
|
|||||||
});
|
});
|
||||||
|
|
||||||
it('large multiline values', async () => {
|
it('large multiline values', async () => {
|
||||||
const pgp = fs.readFileSync(path.join(__dirname, 'fixtures', 'pgp.txt'), {encoding: 'utf-8'});
|
const pgp = fs.readFileSync(path.join(__dirname, '.fixtures', 'pgp.txt'), {encoding: 'utf-8'});
|
||||||
setInput(
|
setInput(
|
||||||
'secrets',
|
'secrets',
|
||||||
`"GPG_KEY=${pgp}"
|
`"GPG_KEY=${pgp}"
|
||||||
@@ -380,6 +380,70 @@ describe('stringToUnicodeEntities', () => {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
describe('countLines', () => {
|
||||||
|
it('counts total number of lines correctly', () => {
|
||||||
|
const text = `This
|
||||||
|
|
||||||
|
is
|
||||||
|
a
|
||||||
|
sample
|
||||||
|
|
||||||
|
text
|
||||||
|
with
|
||||||
|
multiple
|
||||||
|
lines`;
|
||||||
|
|
||||||
|
const result = Util.countLines(text);
|
||||||
|
expect(result).toEqual(10); // Including empty lines
|
||||||
|
});
|
||||||
|
it('handles edge case with empty string', () => {
|
||||||
|
const text = '';
|
||||||
|
|
||||||
|
const result = Util.countLines(text);
|
||||||
|
expect(result).toEqual(1); // Empty string should have 1 line
|
||||||
|
});
|
||||||
|
it('handles edge case with single line', () => {
|
||||||
|
const text = 'Single line text';
|
||||||
|
|
||||||
|
const result = Util.countLines(text);
|
||||||
|
expect(result).toEqual(1); // Single line should have 1 line
|
||||||
|
});
|
||||||
|
it('handles multiple types of line breaks', () => {
|
||||||
|
const text = `Line 1\r\nLine 2\rLine 3\nLine 4`;
|
||||||
|
|
||||||
|
const result = Util.countLines(text);
|
||||||
|
expect(result).toEqual(4); // Different line break types should be counted correctly
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('isPathRelativeTo', () => {
|
||||||
|
it('should return true for a child path directly inside the parent path', () => {
|
||||||
|
const parentPath = '/home/user/projects';
|
||||||
|
const childPath = '/home/user/projects/subproject';
|
||||||
|
expect(Util.isPathRelativeTo(parentPath, childPath)).toBe(true);
|
||||||
|
});
|
||||||
|
it('should return true for a deeply nested child path inside the parent path', () => {
|
||||||
|
const parentPath = '/home/user';
|
||||||
|
const childPath = '/home/user/projects/subproject/module';
|
||||||
|
expect(Util.isPathRelativeTo(parentPath, childPath)).toBe(true);
|
||||||
|
});
|
||||||
|
it('should return false for a child path outside the parent path', () => {
|
||||||
|
const parentPath = '/home/user/projects';
|
||||||
|
const childPath = '/home/user/otherprojects/subproject';
|
||||||
|
expect(Util.isPathRelativeTo(parentPath, childPath)).toBe(false);
|
||||||
|
});
|
||||||
|
it('should return true for a child path specified with relative segments', () => {
|
||||||
|
const parentPath = '/home/user/projects';
|
||||||
|
const childPath = '/home/user/projects/../projects/subproject';
|
||||||
|
expect(Util.isPathRelativeTo(parentPath, childPath)).toBe(true);
|
||||||
|
});
|
||||||
|
it('should return false when the child path is actually a parent path', () => {
|
||||||
|
const parentPath = '/home/user/projects/subproject';
|
||||||
|
const childPath = '/home/user/projects';
|
||||||
|
expect(Util.isPathRelativeTo(parentPath, childPath)).toBe(false);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
// 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()}`;
|
||||||
|
|||||||
@@ -15,8 +15,8 @@
|
|||||||
# limitations under the License.
|
# limitations under the License.
|
||||||
|
|
||||||
ARG NODE_VERSION=20
|
ARG NODE_VERSION=20
|
||||||
ARG DOCKER_VERSION=26.0.2
|
ARG DOCKER_VERSION=27.2.1
|
||||||
ARG BUILDX_VERSION=0.15.1
|
ARG BUILDX_VERSION=0.17.1
|
||||||
|
|
||||||
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
|
||||||
|
|||||||
10
package.json
10
package.json
@@ -45,12 +45,12 @@
|
|||||||
"registry": "https://registry.npmjs.org/"
|
"registry": "https://registry.npmjs.org/"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@actions/artifact": "^2.1.7",
|
"@actions/artifact": "^2.1.11",
|
||||||
"@actions/cache": "^3.2.4",
|
"@actions/cache": "^3.2.4",
|
||||||
"@actions/core": "^1.10.1",
|
"@actions/core": "^1.11.1",
|
||||||
"@actions/exec": "^1.1.1",
|
"@actions/exec": "^1.1.1",
|
||||||
"@actions/github": "^6.0.0",
|
"@actions/github": "^6.0.0",
|
||||||
"@actions/http-client": "^2.2.1",
|
"@actions/http-client": "^2.2.3",
|
||||||
"@actions/io": "^1.1.3",
|
"@actions/io": "^1.1.3",
|
||||||
"@actions/tool-cache": "^2.0.1",
|
"@actions/tool-cache": "^2.0.1",
|
||||||
"@azure/storage-blob": "^12.15.0",
|
"@azure/storage-blob": "^12.15.0",
|
||||||
@@ -60,15 +60,17 @@
|
|||||||
"csv-parse": "^5.5.6",
|
"csv-parse": "^5.5.6",
|
||||||
"gunzip-maybe": "^1.4.2",
|
"gunzip-maybe": "^1.4.2",
|
||||||
"handlebars": "^4.7.8",
|
"handlebars": "^4.7.8",
|
||||||
|
"he": "^1.2.0",
|
||||||
"js-yaml": "^4.1.0",
|
"js-yaml": "^4.1.0",
|
||||||
"jwt-decode": "^4.0.0",
|
"jwt-decode": "^4.0.0",
|
||||||
"semver": "^7.6.2",
|
"semver": "^7.6.3",
|
||||||
"tar-stream": "^3.1.7",
|
"tar-stream": "^3.1.7",
|
||||||
"tmp": "^0.2.3"
|
"tmp": "^0.2.3"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@types/csv-parse": "^1.2.2",
|
"@types/csv-parse": "^1.2.2",
|
||||||
"@types/gunzip-maybe": "^1.4.2",
|
"@types/gunzip-maybe": "^1.4.2",
|
||||||
|
"@types/he": "^1.2.3",
|
||||||
"@types/js-yaml": "^4.0.9",
|
"@types/js-yaml": "^4.0.9",
|
||||||
"@types/node": "^20.12.10",
|
"@types/node": "^20.12.10",
|
||||||
"@types/semver": "^7.5.8",
|
"@types/semver": "^7.5.8",
|
||||||
|
|||||||
@@ -19,8 +19,8 @@ import * as semver from 'semver';
|
|||||||
|
|
||||||
import {Buildx} from '../buildx/buildx';
|
import {Buildx} from '../buildx/buildx';
|
||||||
import {Builder} from '../buildx/builder';
|
import {Builder} from '../buildx/builder';
|
||||||
|
import {Docker} from '../docker/docker';
|
||||||
import {Config} from './config';
|
import {Config} from './config';
|
||||||
import {Exec} from '../exec';
|
|
||||||
|
|
||||||
import {BuilderInfo, NodeInfo} from '../types/buildx/builder';
|
import {BuilderInfo, NodeInfo} from '../types/buildx/builder';
|
||||||
|
|
||||||
@@ -51,13 +51,13 @@ export class BuildKit {
|
|||||||
|
|
||||||
private async getVersionWithinImage(nodeName: string): Promise<string> {
|
private async getVersionWithinImage(nodeName: string): Promise<string> {
|
||||||
core.debug(`BuildKit.getVersionWithinImage nodeName: ${nodeName}`);
|
core.debug(`BuildKit.getVersionWithinImage nodeName: ${nodeName}`);
|
||||||
return Exec.getExecOutput(`docker`, ['inspect', '--format', '{{.Config.Image}}', `${Buildx.containerNamePrefix}${nodeName}`], {
|
return Docker.getExecOutput(['inspect', '--format', '{{.Config.Image}}', `${Buildx.containerNamePrefix}${nodeName}`], {
|
||||||
ignoreReturnCode: true,
|
ignoreReturnCode: true,
|
||||||
silent: true
|
silent: true
|
||||||
}).then(bkitimage => {
|
}).then(bkitimage => {
|
||||||
if (bkitimage.exitCode == 0 && bkitimage.stdout.length > 0) {
|
if (bkitimage.exitCode == 0 && bkitimage.stdout.length > 0) {
|
||||||
core.debug(`BuildKit.getVersionWithinImage image: ${bkitimage.stdout.trim()}`);
|
core.debug(`BuildKit.getVersionWithinImage image: ${bkitimage.stdout.trim()}`);
|
||||||
return Exec.getExecOutput(`docker`, ['run', '--rm', bkitimage.stdout.trim(), '--version'], {
|
return Docker.getExecOutput(['run', '--rm', bkitimage.stdout.trim(), '--version'], {
|
||||||
ignoreReturnCode: true,
|
ignoreReturnCode: true,
|
||||||
silent: true
|
silent: true
|
||||||
}).then(bkitversion => {
|
}).then(bkitversion => {
|
||||||
|
|||||||
113
src/buildkit/git.ts
Normal file
113
src/buildkit/git.ts
Normal file
@@ -0,0 +1,113 @@
|
|||||||
|
/**
|
||||||
|
* Copyright 2024 actions-toolkit authors
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
import {GitRef, GitURL, GitURLFragment, URLUserInfo} from '../types/buildkit/git';
|
||||||
|
|
||||||
|
export class Git {
|
||||||
|
private static protoRegexp = new RegExp('^[a-zA-Z0-9]+://');
|
||||||
|
private static supportedProtos = {
|
||||||
|
http: {},
|
||||||
|
https: {},
|
||||||
|
ssh: {},
|
||||||
|
git: {}
|
||||||
|
};
|
||||||
|
|
||||||
|
// https://github.com/moby/buildkit/blob/2ec1338fc13f73b43f0b1b4f4678d7cd654bc86c/util/gitutil/git_url.go#L79
|
||||||
|
public static parseURL(remote: string): GitURL {
|
||||||
|
const match = remote.match(Git.protoRegexp);
|
||||||
|
if (match && match.length > 0) {
|
||||||
|
let proto = match[0].toLowerCase();
|
||||||
|
proto = proto.slice(0, proto.lastIndexOf('://'));
|
||||||
|
if (!(proto in Git.supportedProtos)) {
|
||||||
|
throw new Error(`Invalid protocol: ${proto}`);
|
||||||
|
}
|
||||||
|
return Git.fromURL(new URL(remote));
|
||||||
|
}
|
||||||
|
|
||||||
|
throw new Error('Unknown protocol');
|
||||||
|
}
|
||||||
|
|
||||||
|
// https://github.com/moby/buildkit/blob/2ec1338fc13f73b43f0b1b4f4678d7cd654bc86c/util/gitutil/git_url.go#L108
|
||||||
|
private static fromURL(url: URL): GitURL {
|
||||||
|
const withoutFragment = new URL(url.toString());
|
||||||
|
withoutFragment.hash = '';
|
||||||
|
|
||||||
|
let user: URLUserInfo | undefined;
|
||||||
|
if (url.username || url.password) {
|
||||||
|
user = {
|
||||||
|
username: url.username,
|
||||||
|
password: url.password,
|
||||||
|
passwordSet: url.password !== ''
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO: handle SCP-style URLs
|
||||||
|
|
||||||
|
return {
|
||||||
|
scheme: url.protocol.slice(0, -1),
|
||||||
|
user: user,
|
||||||
|
host: `${url.hostname}${url.port ? ':' + url.port : ''}`,
|
||||||
|
path: url.pathname,
|
||||||
|
fragment: Git.splitGitFragment(url.hash),
|
||||||
|
remote: withoutFragment.toString()
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
// https://github.com/moby/buildkit/blob/2ec1338fc13f73b43f0b1b4f4678d7cd654bc86c/util/gitutil/git_url.go#L69
|
||||||
|
private static splitGitFragment(fragment: string): GitURLFragment | undefined {
|
||||||
|
if (fragment === '') {
|
||||||
|
return undefined;
|
||||||
|
}
|
||||||
|
const [ref, subdir] = fragment.slice(1).split(':');
|
||||||
|
return {
|
||||||
|
ref: ref,
|
||||||
|
subdir: subdir
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
// https://github.com/moby/buildkit/blob/2ec1338fc13f73b43f0b1b4f4678d7cd654bc86c/util/gitutil/git_ref.go#L52
|
||||||
|
public static parseRef(ref: string): GitRef | undefined {
|
||||||
|
const res: GitRef = {};
|
||||||
|
let remote: GitURL;
|
||||||
|
if (ref.startsWith('./') || ref.startsWith('../')) {
|
||||||
|
throw new Error('Invalid argument');
|
||||||
|
} else if (ref.startsWith('github.com/')) {
|
||||||
|
res.indistinguishableFromLocal = true; // Deprecated
|
||||||
|
remote = Git.fromURL(new URL('https://' + ref));
|
||||||
|
} else {
|
||||||
|
remote = Git.parseURL(ref);
|
||||||
|
if (['http', 'git'].includes(remote.scheme)) {
|
||||||
|
res.unencryptedTCP = true; // Discouraged, but not deprecated
|
||||||
|
}
|
||||||
|
if (['http', 'https'].includes(remote.scheme) && !remote.path.endsWith('.git')) {
|
||||||
|
throw new Error('Invalid argument');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
res.remote = remote.remote;
|
||||||
|
|
||||||
|
if (res.indistinguishableFromLocal) {
|
||||||
|
res.remote = res.remote.split('://')[1];
|
||||||
|
}
|
||||||
|
if (remote.fragment) {
|
||||||
|
res.commit = remote.fragment.ref;
|
||||||
|
res.subDir = remote.fragment.subdir;
|
||||||
|
}
|
||||||
|
|
||||||
|
const repoSplitBySlash = res.remote.split('/');
|
||||||
|
res.shortName = repoSplitBySlash[repoSplitBySlash.length - 1].replace('.git', '');
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -24,7 +24,9 @@ import {Exec} from '../exec';
|
|||||||
import {Util} from '../util';
|
import {Util} from '../util';
|
||||||
|
|
||||||
import {ExecOptions} from '@actions/exec';
|
import {ExecOptions} from '@actions/exec';
|
||||||
import {BakeDefinition, BakeMetadata} from '../types/buildx/bake';
|
import {BakeDefinition} from '../types/buildx/bake';
|
||||||
|
import {BuildMetadata} from '../types/buildx/build';
|
||||||
|
import {VertexWarning} from '../types/buildkit/client';
|
||||||
|
|
||||||
export interface BakeOpts {
|
export interface BakeOpts {
|
||||||
buildx?: Buildx;
|
buildx?: Buildx;
|
||||||
@@ -57,7 +59,7 @@ export class Bake {
|
|||||||
return path.join(Context.tmpDir(), this.metadataFilename);
|
return path.join(Context.tmpDir(), this.metadataFilename);
|
||||||
}
|
}
|
||||||
|
|
||||||
public resolveMetadata(): BakeMetadata | undefined {
|
public resolveMetadata(): BuildMetadata | undefined {
|
||||||
const metadataFile = this.getMetadataFilePath();
|
const metadataFile = this.getMetadataFilePath();
|
||||||
if (!fs.existsSync(metadataFile)) {
|
if (!fs.existsSync(metadataFile)) {
|
||||||
return undefined;
|
return undefined;
|
||||||
@@ -66,10 +68,10 @@ export class Bake {
|
|||||||
if (content === 'null') {
|
if (content === 'null') {
|
||||||
return undefined;
|
return undefined;
|
||||||
}
|
}
|
||||||
return <BakeMetadata>JSON.parse(content);
|
return <BuildMetadata>JSON.parse(content);
|
||||||
}
|
}
|
||||||
|
|
||||||
public resolveRefs(metadata?: BakeMetadata): Array<string> | undefined {
|
public resolveRefs(metadata?: BuildMetadata): Array<string> | undefined {
|
||||||
if (!metadata) {
|
if (!metadata) {
|
||||||
metadata = this.resolveMetadata();
|
metadata = this.resolveMetadata();
|
||||||
if (!metadata) {
|
if (!metadata) {
|
||||||
@@ -82,7 +84,20 @@ export class Bake {
|
|||||||
refs.push(metadata[key]['buildx.build.ref']);
|
refs.push(metadata[key]['buildx.build.ref']);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return refs;
|
return refs.length > 0 ? refs : undefined;
|
||||||
|
}
|
||||||
|
|
||||||
|
public resolveWarnings(metadata?: BuildMetadata): Array<VertexWarning> | undefined {
|
||||||
|
if (!metadata) {
|
||||||
|
metadata = this.resolveMetadata();
|
||||||
|
if (!metadata) {
|
||||||
|
return undefined;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if ('buildx.build.warnings' in metadata) {
|
||||||
|
return metadata['buildx.build.warnings'] as Array<VertexWarning>;
|
||||||
|
}
|
||||||
|
return undefined;
|
||||||
}
|
}
|
||||||
|
|
||||||
public async getDefinition(cmdOpts: BakeCmdOpts, execOptions?: ExecOptions): Promise<BakeDefinition> {
|
public async getDefinition(cmdOpts: BakeCmdOpts, execOptions?: ExecOptions): Promise<BakeDefinition> {
|
||||||
|
|||||||
@@ -25,6 +25,7 @@ import {GitHub} from '../github';
|
|||||||
import {Util} from '../util';
|
import {Util} from '../util';
|
||||||
|
|
||||||
import {BuildMetadata} from '../types/buildx/build';
|
import {BuildMetadata} from '../types/buildx/build';
|
||||||
|
import {VertexWarning} from '../types/buildkit/client';
|
||||||
import {ProvenancePredicate} from '../types/intoto/slsa_provenance/v0.2/provenance';
|
import {ProvenancePredicate} from '../types/intoto/slsa_provenance/v0.2/provenance';
|
||||||
|
|
||||||
export interface BuildOpts {
|
export interface BuildOpts {
|
||||||
@@ -96,6 +97,19 @@ export class Build {
|
|||||||
return undefined;
|
return undefined;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public resolveWarnings(metadata?: BuildMetadata): Array<VertexWarning> | undefined {
|
||||||
|
if (!metadata) {
|
||||||
|
metadata = this.resolveMetadata();
|
||||||
|
if (!metadata) {
|
||||||
|
return undefined;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if ('buildx.build.warnings' in metadata) {
|
||||||
|
return metadata['buildx.build.warnings'] as Array<VertexWarning>;
|
||||||
|
}
|
||||||
|
return undefined;
|
||||||
|
}
|
||||||
|
|
||||||
public resolveDigest(metadata?: BuildMetadata): string | undefined {
|
public resolveDigest(metadata?: BuildMetadata): string | undefined {
|
||||||
if (!metadata) {
|
if (!metadata) {
|
||||||
metadata = this.resolveMetadata();
|
metadata = this.resolveMetadata();
|
||||||
|
|||||||
@@ -19,10 +19,16 @@ import path from 'path';
|
|||||||
import * as core from '@actions/core';
|
import * as core from '@actions/core';
|
||||||
import * as semver from 'semver';
|
import * as semver from 'semver';
|
||||||
|
|
||||||
|
import {Git} from '../buildkit/git';
|
||||||
import {Docker} from '../docker/docker';
|
import {Docker} from '../docker/docker';
|
||||||
|
import {GitHub} from '../github';
|
||||||
import {Exec} from '../exec';
|
import {Exec} from '../exec';
|
||||||
|
import {Util} from '../util';
|
||||||
|
|
||||||
|
import {VertexWarning} from '../types/buildkit/client';
|
||||||
|
import {GitURL} from '../types/buildkit/git';
|
||||||
import {Cert, LocalRefsOpts, LocalRefsResponse, LocalState} from '../types/buildx/buildx';
|
import {Cert, LocalRefsOpts, LocalRefsResponse, LocalState} from '../types/buildx/buildx';
|
||||||
|
import {GitHubAnnotation} from '../types/github';
|
||||||
|
|
||||||
export interface BuildxOpts {
|
export interface BuildxOpts {
|
||||||
standalone?: boolean;
|
standalone?: boolean;
|
||||||
@@ -177,6 +183,54 @@ export class Buildx {
|
|||||||
return driverOpts;
|
return driverOpts;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static localState(ref: string, dir?: string): LocalState {
|
||||||
|
const [builderName, nodeName, id] = ref.split('/');
|
||||||
|
if (!builderName || !nodeName || !id) {
|
||||||
|
throw new Error(`Invalid build reference: ${ref}`);
|
||||||
|
}
|
||||||
|
const lsPath = path.join(dir || Buildx.refsDir, builderName, nodeName, id);
|
||||||
|
if (!fs.existsSync(lsPath)) {
|
||||||
|
throw new Error(`Local state not found in ${lsPath}`);
|
||||||
|
}
|
||||||
|
return Buildx.fixLocalState(<LocalState>JSON.parse(fs.readFileSync(lsPath, 'utf8')));
|
||||||
|
}
|
||||||
|
|
||||||
|
// https://github.com/docker/buildx/pull/2560
|
||||||
|
private static fixLocalState(ls: LocalState): LocalState {
|
||||||
|
const fnTrimToValidContext = function (inp: string): [string, string, boolean] {
|
||||||
|
const match = inp.match(/(.*)(https?:\/{1,2}\S+|ssh:\/{1,2}\S+|git:\/{1,2}\S+)/i);
|
||||||
|
if (match && match.length == 3) {
|
||||||
|
const trimed = match[1];
|
||||||
|
let url = match[2];
|
||||||
|
if (url.startsWith('https:/') && !url.startsWith('https://')) {
|
||||||
|
url = url.replace('https:/', 'https://');
|
||||||
|
}
|
||||||
|
if (url.startsWith('http:/') && !url.startsWith('http://')) {
|
||||||
|
url = url.replace('http:/', 'http://');
|
||||||
|
}
|
||||||
|
if (url.startsWith('ssh:/') && !url.startsWith('ssh://')) {
|
||||||
|
url = url.replace('ssh:/', 'ssh://');
|
||||||
|
}
|
||||||
|
if (url.startsWith('git:/') && !url.startsWith('git://')) {
|
||||||
|
url = url.replace('git:/', 'git://');
|
||||||
|
}
|
||||||
|
return [url, trimed, true];
|
||||||
|
}
|
||||||
|
return [inp, '', false];
|
||||||
|
};
|
||||||
|
|
||||||
|
const [contextPath, trimedPath, isURL] = fnTrimToValidContext(ls.LocalPath);
|
||||||
|
if (isURL) {
|
||||||
|
ls.LocalPath = contextPath;
|
||||||
|
if (ls.DockerfilePath.indexOf(trimedPath) === 0) {
|
||||||
|
ls.DockerfilePath = ls.DockerfilePath.substring(trimedPath.length);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
ls.LocalPath = ls.LocalPath.endsWith('/-') ? '-' : ls.LocalPath;
|
||||||
|
ls.DockerfilePath = ls.DockerfilePath.endsWith('/-') ? '-' : ls.DockerfilePath;
|
||||||
|
return ls;
|
||||||
|
}
|
||||||
|
|
||||||
public static refs(opts: LocalRefsOpts, refs: LocalRefsResponse = {}): LocalRefsResponse {
|
public static refs(opts: LocalRefsOpts, refs: LocalRefsResponse = {}): LocalRefsResponse {
|
||||||
const {dir, builderName, nodeName, since} = opts;
|
const {dir, builderName, nodeName, since} = opts;
|
||||||
|
|
||||||
@@ -210,7 +264,7 @@ export class Buildx {
|
|||||||
if (since && stat.mtime < since) {
|
if (since && stat.mtime < since) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
const localState = <LocalState>JSON.parse(fs.readFileSync(filePath, 'utf8'));
|
const localState = Buildx.fixLocalState(<LocalState>JSON.parse(fs.readFileSync(filePath, 'utf8')));
|
||||||
const ref = `${builderName}/${nodeName}/${file}`;
|
const ref = `${builderName}/${nodeName}/${file}`;
|
||||||
refs[ref] = localState;
|
refs[ref] = localState;
|
||||||
}
|
}
|
||||||
@@ -218,4 +272,151 @@ export class Buildx {
|
|||||||
|
|
||||||
return refs;
|
return refs;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static async convertWarningsToGitHubAnnotations(warnings: Array<VertexWarning>, buildRefs: Array<string>, refsDir?: string): Promise<Array<GitHubAnnotation> | undefined> {
|
||||||
|
if (warnings.length === 0) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
const fnGitURL = function (inp: string): GitURL | undefined {
|
||||||
|
try {
|
||||||
|
return Git.parseURL(inp);
|
||||||
|
} catch (e) {
|
||||||
|
// noop
|
||||||
|
}
|
||||||
|
};
|
||||||
|
const fnLocalState = function (ref: string): LocalState | undefined {
|
||||||
|
try {
|
||||||
|
return Buildx.localState(ref, refsDir);
|
||||||
|
} catch (e) {
|
||||||
|
core.debug(`Buildx.convertWarningsToGitHubAnnotations(${ref}): local state not found: ${e.message}`);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
interface Dockerfile {
|
||||||
|
path: string;
|
||||||
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||||
|
content?: any;
|
||||||
|
remote?: boolean;
|
||||||
|
}
|
||||||
|
|
||||||
|
const dockerfiles: Array<Dockerfile> = [];
|
||||||
|
for (const ref of buildRefs) {
|
||||||
|
const ls = fnLocalState(ref);
|
||||||
|
if (!ls) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ls.DockerfilePath == '-') {
|
||||||
|
// exclude dockerfile from stdin
|
||||||
|
core.debug(`Buildx.convertWarningsToGitHubAnnotations(${ref}): skipping stdin Dockerfile`);
|
||||||
|
continue;
|
||||||
|
} else if (ls.DockerfilePath == '') {
|
||||||
|
ls.DockerfilePath = 'Dockerfile';
|
||||||
|
}
|
||||||
|
|
||||||
|
const gitURL = fnGitURL(ls.LocalPath);
|
||||||
|
if (gitURL) {
|
||||||
|
core.debug(`Buildx.convertWarningsToGitHubAnnotations(${ref}): git context detected: ${ls.LocalPath}`);
|
||||||
|
const remoteHost = gitURL.host.replace(/:.*/, '');
|
||||||
|
if (remoteHost !== 'github.com' && !remoteHost.endsWith('.ghe.com')) {
|
||||||
|
// we only support running actions on GitHub for now
|
||||||
|
// we might add support for GitLab in the future
|
||||||
|
core.debug(`Buildx.convertWarningsToGitHubAnnotations(${ref}): not a GitHub repo: ${remoteHost}`);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
// if repository matches then we can link to the Dockerfile
|
||||||
|
const remoteRepo = gitURL.path.replace(/^\//, '').replace(/\.git$/, '');
|
||||||
|
if (remoteRepo !== GitHub.repository) {
|
||||||
|
core.debug(`Buildx.convertWarningsToGitHubAnnotations(${ref}): not same GitHub repo: ${remoteRepo} != ${GitHub.repository}`);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
dockerfiles.push({
|
||||||
|
path: ls.DockerfilePath, // dockerfile path is always relative for a git context
|
||||||
|
remote: true
|
||||||
|
});
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!fs.existsSync(ls.DockerfilePath)) {
|
||||||
|
core.debug(`Buildx.convertWarningsToGitHubAnnotations: Dockerfile not found from localstate ref ${ref}: ${ls.DockerfilePath}`);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
const workspaceDir = GitHub.workspace;
|
||||||
|
// only treat dockerfile path relative to GitHub actions workspace dir
|
||||||
|
if (Util.isPathRelativeTo(workspaceDir, ls.DockerfilePath)) {
|
||||||
|
dockerfiles.push({
|
||||||
|
path: path.relative(workspaceDir, ls.DockerfilePath),
|
||||||
|
content: Buffer.from(fs.readFileSync(ls.DockerfilePath, {encoding: 'utf-8'}), 'utf-8').toString('base64')
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
core.debug(`Buildx.convertWarningsToGitHubAnnotations: skipping Dockerfile outside of workspace: ${ls.DockerfilePath}`);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (dockerfiles.length === 0) {
|
||||||
|
core.debug(`Buildx.convertWarningsToGitHubAnnotations: no Dockerfiles found`);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
core.debug(`Buildx.convertWarningsToGitHubAnnotations: found ${dockerfiles.length} Dockerfiles: ${JSON.stringify(dockerfiles, null, 2)}`);
|
||||||
|
|
||||||
|
const annotations: Array<GitHubAnnotation> = [];
|
||||||
|
for (const warning of warnings) {
|
||||||
|
if (!warning.detail || !warning.short) {
|
||||||
|
core.debug(`Buildx.convertWarningsToGitHubAnnotations: skipping warning without detail or short`);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
const warningSourceFilename = warning.sourceInfo?.filename;
|
||||||
|
const warningSourceData = warning.sourceInfo?.data;
|
||||||
|
if (!warningSourceFilename || !warningSourceData) {
|
||||||
|
core.debug(`Buildx.convertWarningsToGitHubAnnotations: skipping warning without source info filename or data`);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
const title = warning.detail.map(encoded => atob(encoded)).join(' ');
|
||||||
|
let message = atob(warning.short).replace(/\s\(line \d+\)$/, '');
|
||||||
|
if (warning.url) {
|
||||||
|
// https://github.com/docker/buildx/blob/d8c9ebde1fdcf659f1fa3efa6ccc27a28b0f1564/commands/build.go#L854
|
||||||
|
message += `\nMore info: ${warning.url}`;
|
||||||
|
}
|
||||||
|
|
||||||
|
// GitHub's annotations don't clearly show ranges of lines, so we'll just
|
||||||
|
// show the first line: https://github.com/orgs/community/discussions/129899
|
||||||
|
const startLine = warning.range && warning.range.length > 0 ? warning.range[0]?.start.line : undefined;
|
||||||
|
|
||||||
|
// TODO: When GitHub's annotations support showing ranges properly, we can use this code
|
||||||
|
// let startLine: number | undefined, endLine: number | undefined;
|
||||||
|
// for (const range of warning.range ?? []) {
|
||||||
|
// if (range.start.line && (!startLine || range.start.line < startLine)) {
|
||||||
|
// startLine = range.start.line;
|
||||||
|
// }
|
||||||
|
// if (range.end.line && (!endLine || range.end.line > endLine)) {
|
||||||
|
// endLine = range.end.line;
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
|
||||||
|
let annotated = false;
|
||||||
|
for (const dockerfile of dockerfiles) {
|
||||||
|
// a valid dockerfile path and content is required to match the warning
|
||||||
|
// source info or always assume it's valid if this is a remote git
|
||||||
|
// context as we can't read the content of the Dockerfile in this case.
|
||||||
|
if (dockerfile.remote || (dockerfile.path.endsWith(warningSourceFilename) && dockerfile.content === warningSourceData)) {
|
||||||
|
annotations.push({
|
||||||
|
title: title,
|
||||||
|
message: message,
|
||||||
|
file: dockerfile.path,
|
||||||
|
startLine: startLine
|
||||||
|
});
|
||||||
|
annotated = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!annotated) {
|
||||||
|
core.debug(`Buildx.convertWarningsToGitHubAnnotations: skipping warning without matching Dockerfile ${warningSourceFilename}: ${title}`);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return annotations;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user