mirror of https://github.com/docker/buildx.git
vendor: update buildkit to v0.14.0-rc2
Signed-off-by: Tonis Tiigi <tonistiigi@gmail.com>
This commit is contained in:
parent
82b6826cd7
commit
aa0f90fdd6
11
go.mod
11
go.mod
|
@ -8,15 +8,15 @@ require (
|
||||||
github.com/aws/aws-sdk-go-v2/config v1.26.6
|
github.com/aws/aws-sdk-go-v2/config v1.26.6
|
||||||
github.com/compose-spec/compose-go/v2 v2.1.2
|
github.com/compose-spec/compose-go/v2 v2.1.2
|
||||||
github.com/containerd/console v1.0.4
|
github.com/containerd/console v1.0.4
|
||||||
github.com/containerd/containerd v1.7.17
|
github.com/containerd/containerd v1.7.18
|
||||||
github.com/containerd/continuity v0.4.3
|
github.com/containerd/continuity v0.4.3
|
||||||
github.com/containerd/log v0.1.0
|
github.com/containerd/log v0.1.0
|
||||||
github.com/containerd/typeurl/v2 v2.1.1
|
github.com/containerd/typeurl/v2 v2.1.1
|
||||||
github.com/creack/pty v1.1.18
|
github.com/creack/pty v1.1.18
|
||||||
github.com/distribution/reference v0.5.0
|
github.com/distribution/reference v0.5.0
|
||||||
github.com/docker/cli v26.1.3+incompatible
|
github.com/docker/cli v26.1.4+incompatible
|
||||||
github.com/docker/cli-docs-tool v0.7.0
|
github.com/docker/cli-docs-tool v0.7.0
|
||||||
github.com/docker/docker v26.1.3+incompatible
|
github.com/docker/docker v26.1.4+incompatible
|
||||||
github.com/docker/go-units v0.5.0
|
github.com/docker/go-units v0.5.0
|
||||||
github.com/gofrs/flock v0.8.1
|
github.com/gofrs/flock v0.8.1
|
||||||
github.com/gogo/protobuf v1.3.2
|
github.com/gogo/protobuf v1.3.2
|
||||||
|
@ -26,7 +26,7 @@ require (
|
||||||
github.com/hashicorp/go-cty-funcs v0.0.0-20230405223818-a090f58aa992
|
github.com/hashicorp/go-cty-funcs v0.0.0-20230405223818-a090f58aa992
|
||||||
github.com/hashicorp/hcl/v2 v2.20.1
|
github.com/hashicorp/hcl/v2 v2.20.1
|
||||||
github.com/in-toto/in-toto-golang v0.5.0
|
github.com/in-toto/in-toto-golang v0.5.0
|
||||||
github.com/moby/buildkit v0.14.0-rc1
|
github.com/moby/buildkit v0.14.0-rc2
|
||||||
github.com/moby/sys/mountinfo v0.7.1
|
github.com/moby/sys/mountinfo v0.7.1
|
||||||
github.com/moby/sys/signal v0.7.0
|
github.com/moby/sys/signal v0.7.0
|
||||||
github.com/morikuni/aec v1.0.0
|
github.com/morikuni/aec v1.0.0
|
||||||
|
@ -45,7 +45,7 @@ require (
|
||||||
go.opentelemetry.io/otel/metric v1.21.0
|
go.opentelemetry.io/otel/metric v1.21.0
|
||||||
go.opentelemetry.io/otel/sdk v1.21.0
|
go.opentelemetry.io/otel/sdk v1.21.0
|
||||||
go.opentelemetry.io/otel/trace v1.21.0
|
go.opentelemetry.io/otel/trace v1.21.0
|
||||||
golang.org/x/mod v0.14.0
|
golang.org/x/mod v0.17.0
|
||||||
golang.org/x/sync v0.6.0
|
golang.org/x/sync v0.6.0
|
||||||
golang.org/x/sys v0.18.0
|
golang.org/x/sys v0.18.0
|
||||||
golang.org/x/term v0.18.0
|
golang.org/x/term v0.18.0
|
||||||
|
@ -79,6 +79,7 @@ require (
|
||||||
github.com/beorn7/perks v1.0.1 // indirect
|
github.com/beorn7/perks v1.0.1 // indirect
|
||||||
github.com/cenkalti/backoff/v4 v4.2.1 // indirect
|
github.com/cenkalti/backoff/v4 v4.2.1 // indirect
|
||||||
github.com/cespare/xxhash/v2 v2.2.0 // indirect
|
github.com/cespare/xxhash/v2 v2.2.0 // indirect
|
||||||
|
github.com/containerd/errdefs v0.1.0 // indirect
|
||||||
github.com/containerd/ttrpc v1.2.4 // indirect
|
github.com/containerd/ttrpc v1.2.4 // indirect
|
||||||
github.com/davecgh/go-spew v1.1.1 // indirect
|
github.com/davecgh/go-spew v1.1.1 // indirect
|
||||||
github.com/docker/distribution v2.8.2+incompatible // indirect
|
github.com/docker/distribution v2.8.2+incompatible // indirect
|
||||||
|
|
22
go.sum
22
go.sum
|
@ -90,10 +90,12 @@ github.com/containerd/cgroups v1.1.0 h1:v8rEWFl6EoqHB+swVNjVoCJE8o3jX7e8nqBGPLaD
|
||||||
github.com/containerd/cgroups v1.1.0/go.mod h1:6ppBcbh/NOOUU+dMKrykgaBnK9lCIBxHqJDGwsa1mIw=
|
github.com/containerd/cgroups v1.1.0/go.mod h1:6ppBcbh/NOOUU+dMKrykgaBnK9lCIBxHqJDGwsa1mIw=
|
||||||
github.com/containerd/console v1.0.4 h1:F2g4+oChYvBTsASRTz8NP6iIAi97J3TtSAsLbIFn4ro=
|
github.com/containerd/console v1.0.4 h1:F2g4+oChYvBTsASRTz8NP6iIAi97J3TtSAsLbIFn4ro=
|
||||||
github.com/containerd/console v1.0.4/go.mod h1:YynlIjWYF8myEu6sdkwKIvGQq+cOckRm6So2avqoYAk=
|
github.com/containerd/console v1.0.4/go.mod h1:YynlIjWYF8myEu6sdkwKIvGQq+cOckRm6So2avqoYAk=
|
||||||
github.com/containerd/containerd v1.7.17 h1:KjNnn0+tAVQHAoaWRjmdak9WlvnFR/8rU1CHHy8Rm2A=
|
github.com/containerd/containerd v1.7.18 h1:jqjZTQNfXGoEaZdW1WwPU0RqSn1Bm2Ay/KJPUuO8nao=
|
||||||
github.com/containerd/containerd v1.7.17/go.mod h1:vK+hhT4TIv2uejlcDlbVIc8+h/BqtKLIyNrtCZol8lI=
|
github.com/containerd/containerd v1.7.18/go.mod h1:IYEk9/IO6wAPUz2bCMVUbsfXjzw5UNP5fLz4PsUygQ4=
|
||||||
github.com/containerd/continuity v0.4.3 h1:6HVkalIp+2u1ZLH1J/pYX2oBVXlJZvh1X1A7bEZ9Su8=
|
github.com/containerd/continuity v0.4.3 h1:6HVkalIp+2u1ZLH1J/pYX2oBVXlJZvh1X1A7bEZ9Su8=
|
||||||
github.com/containerd/continuity v0.4.3/go.mod h1:F6PTNCKepoxEaXLQp3wDAjygEnImnZ/7o4JzpodfroQ=
|
github.com/containerd/continuity v0.4.3/go.mod h1:F6PTNCKepoxEaXLQp3wDAjygEnImnZ/7o4JzpodfroQ=
|
||||||
|
github.com/containerd/errdefs v0.1.0 h1:m0wCRBiu1WJT/Fr+iOoQHMQS/eP5myQ8lCv4Dz5ZURM=
|
||||||
|
github.com/containerd/errdefs v0.1.0/go.mod h1:YgWiiHtLmSeBrvpw+UfPijzbLaB77mEG1WwJTDETIV0=
|
||||||
github.com/containerd/fifo v1.1.0 h1:4I2mbh5stb1u6ycIABlBw9zgtlK8viPI9QkQNRQEEmY=
|
github.com/containerd/fifo v1.1.0 h1:4I2mbh5stb1u6ycIABlBw9zgtlK8viPI9QkQNRQEEmY=
|
||||||
github.com/containerd/fifo v1.1.0/go.mod h1:bmC4NWMbXlt2EZ0Hc7Fx7QzTFxgPID13eH0Qu+MAb2o=
|
github.com/containerd/fifo v1.1.0/go.mod h1:bmC4NWMbXlt2EZ0Hc7Fx7QzTFxgPID13eH0Qu+MAb2o=
|
||||||
github.com/containerd/log v0.1.0 h1:TCJt7ioM2cr/tfR8GPbGf9/VRAX8D2B4PjzCpfX540I=
|
github.com/containerd/log v0.1.0 h1:TCJt7ioM2cr/tfR8GPbGf9/VRAX8D2B4PjzCpfX540I=
|
||||||
|
@ -117,15 +119,15 @@ github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSs
|
||||||
github.com/denisenkom/go-mssqldb v0.0.0-20191128021309-1d7a30a10f73/go.mod h1:xbL0rPBG9cCiLr28tMa8zpbdarY27NDyej4t/EjAShU=
|
github.com/denisenkom/go-mssqldb v0.0.0-20191128021309-1d7a30a10f73/go.mod h1:xbL0rPBG9cCiLr28tMa8zpbdarY27NDyej4t/EjAShU=
|
||||||
github.com/distribution/reference v0.5.0 h1:/FUIFXtfc/x2gpa5/VGfiGLuOIdYa1t65IKK2OFGvA0=
|
github.com/distribution/reference v0.5.0 h1:/FUIFXtfc/x2gpa5/VGfiGLuOIdYa1t65IKK2OFGvA0=
|
||||||
github.com/distribution/reference v0.5.0/go.mod h1:BbU0aIcezP1/5jX/8MP0YiH4SdvB5Y4f/wlDRiLyi3E=
|
github.com/distribution/reference v0.5.0/go.mod h1:BbU0aIcezP1/5jX/8MP0YiH4SdvB5Y4f/wlDRiLyi3E=
|
||||||
github.com/docker/cli v26.1.3+incompatible h1:bUpXT/N0kDE3VUHI2r5VMsYQgi38kYuoC0oL9yt3lqc=
|
github.com/docker/cli v26.1.4+incompatible h1:I8PHdc0MtxEADqYJZvhBrW9bo8gawKwwenxRM7/rLu8=
|
||||||
github.com/docker/cli v26.1.3+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8=
|
github.com/docker/cli v26.1.4+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8=
|
||||||
github.com/docker/cli-docs-tool v0.7.0 h1:M2Da98Unz2kz3A5d4yeSGbhyOge2mfYSNjAFt01Rw0M=
|
github.com/docker/cli-docs-tool v0.7.0 h1:M2Da98Unz2kz3A5d4yeSGbhyOge2mfYSNjAFt01Rw0M=
|
||||||
github.com/docker/cli-docs-tool v0.7.0/go.mod h1:zMjqTFCU361PRh8apiXzeAZ1Q/xupbIwTusYpzCXS/o=
|
github.com/docker/cli-docs-tool v0.7.0/go.mod h1:zMjqTFCU361PRh8apiXzeAZ1Q/xupbIwTusYpzCXS/o=
|
||||||
github.com/docker/distribution v2.7.1+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w=
|
github.com/docker/distribution v2.7.1+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w=
|
||||||
github.com/docker/distribution v2.8.2+incompatible h1:T3de5rq0dB1j30rp0sA2rER+m322EBzniBPB6ZIzuh8=
|
github.com/docker/distribution v2.8.2+incompatible h1:T3de5rq0dB1j30rp0sA2rER+m322EBzniBPB6ZIzuh8=
|
||||||
github.com/docker/distribution v2.8.2+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w=
|
github.com/docker/distribution v2.8.2+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w=
|
||||||
github.com/docker/docker v26.1.3+incompatible h1:lLCzRbrVZrljpVNobJu1J2FHk8V0s4BawoZippkc+xo=
|
github.com/docker/docker v26.1.4+incompatible h1:vuTpXDuoga+Z38m1OZHzl7NKisKWaWlhjQk7IDPSLsU=
|
||||||
github.com/docker/docker v26.1.3+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk=
|
github.com/docker/docker v26.1.4+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk=
|
||||||
github.com/docker/docker-credential-helpers v0.8.0 h1:YQFtbBQb4VrpoPxhFuzEBPQ9E16qz5SpHLS+uswaCp8=
|
github.com/docker/docker-credential-helpers v0.8.0 h1:YQFtbBQb4VrpoPxhFuzEBPQ9E16qz5SpHLS+uswaCp8=
|
||||||
github.com/docker/docker-credential-helpers v0.8.0/go.mod h1:UGFXcuoQ5TxPiB54nHOZ32AWRqQdECoh/Mg0AlEYb40=
|
github.com/docker/docker-credential-helpers v0.8.0/go.mod h1:UGFXcuoQ5TxPiB54nHOZ32AWRqQdECoh/Mg0AlEYb40=
|
||||||
github.com/docker/go v1.5.1-1.0.20160303222718-d30aec9fd63c h1:lzqkGL9b3znc+ZUgi7FlLnqjQhcXxkNM/quxIjBVMD0=
|
github.com/docker/go v1.5.1-1.0.20160303222718-d30aec9fd63c h1:lzqkGL9b3znc+ZUgi7FlLnqjQhcXxkNM/quxIjBVMD0=
|
||||||
|
@ -300,8 +302,8 @@ github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyua
|
||||||
github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
|
github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
|
||||||
github.com/mitchellh/reflectwalk v1.0.2 h1:G2LzWKi524PWgd3mLHV8Y5k7s6XUvT0Gef6zxSIeXaQ=
|
github.com/mitchellh/reflectwalk v1.0.2 h1:G2LzWKi524PWgd3mLHV8Y5k7s6XUvT0Gef6zxSIeXaQ=
|
||||||
github.com/mitchellh/reflectwalk v1.0.2/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw=
|
github.com/mitchellh/reflectwalk v1.0.2/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw=
|
||||||
github.com/moby/buildkit v0.14.0-rc1 h1:pdnGXXT0Wu480PMQzyFUBN/LgtfIwlYoLlT7jba1IVQ=
|
github.com/moby/buildkit v0.14.0-rc2 h1:qvl0hOKeyAWReOkksNtstQjPNaAD4jN3Dvq4r7slqYM=
|
||||||
github.com/moby/buildkit v0.14.0-rc1/go.mod h1:J3TW5gH3fc2BVrLnqxnGGQauChFwCzhv6FPkBKTGciU=
|
github.com/moby/buildkit v0.14.0-rc2/go.mod h1:/ZJNHNVso1nf063XlDhEkNEcRNW19utVpUKixCUo9Ks=
|
||||||
github.com/moby/docker-image-spec v1.3.1 h1:jMKff3w6PgbfSa69GfNg+zN/XLhfXJGnEx3Nl2EsFP0=
|
github.com/moby/docker-image-spec v1.3.1 h1:jMKff3w6PgbfSa69GfNg+zN/XLhfXJGnEx3Nl2EsFP0=
|
||||||
github.com/moby/docker-image-spec v1.3.1/go.mod h1:eKmb5VW8vQEh/BAr2yvVNvuiJuY6UIocYsFu/DxxRpo=
|
github.com/moby/docker-image-spec v1.3.1/go.mod h1:eKmb5VW8vQEh/BAr2yvVNvuiJuY6UIocYsFu/DxxRpo=
|
||||||
github.com/moby/locker v1.0.1 h1:fOXqR41zeveg4fFODix+1Ch4mj/gT0NE1XJbp/epuBg=
|
github.com/moby/locker v1.0.1 h1:fOXqR41zeveg4fFODix+1Ch4mj/gT0NE1XJbp/epuBg=
|
||||||
|
@ -504,8 +506,8 @@ golang.org/x/exp v0.0.0-20240112132812-db7319d0e0e3 h1:hNQpMuAJe5CtcUqCXaWga3FHu
|
||||||
golang.org/x/exp v0.0.0-20240112132812-db7319d0e0e3/go.mod h1:idGWGoKP1toJGkd5/ig9ZLuPcZBC3ewk7SzmH0uou08=
|
golang.org/x/exp v0.0.0-20240112132812-db7319d0e0e3/go.mod h1:idGWGoKP1toJGkd5/ig9ZLuPcZBC3ewk7SzmH0uou08=
|
||||||
golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
|
golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
|
||||||
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
|
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
|
||||||
golang.org/x/mod v0.14.0 h1:dGoOF9QVLYng8IHTm7BAyWqCqSheQ5pYWGhzW00YJr0=
|
golang.org/x/mod v0.17.0 h1:zY54UmvipHiNd+pm+m0x9KhZ9hl1/7QNMyxXbc6ICqA=
|
||||||
golang.org/x/mod v0.14.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
|
golang.org/x/mod v0.17.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
|
||||||
golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||||
golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||||
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
|
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
|
||||||
|
|
|
@ -29,7 +29,7 @@ import (
|
||||||
"strconv"
|
"strconv"
|
||||||
"sync"
|
"sync"
|
||||||
|
|
||||||
"github.com/containerd/containerd/log"
|
"github.com/containerd/log"
|
||||||
"github.com/klauspost/compress/zstd"
|
"github.com/klauspost/compress/zstd"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
|
@ -24,9 +24,9 @@ import (
|
||||||
"sync"
|
"sync"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/containerd/containerd/errdefs"
|
|
||||||
"github.com/containerd/containerd/log"
|
|
||||||
"github.com/containerd/containerd/pkg/randutil"
|
"github.com/containerd/containerd/pkg/randutil"
|
||||||
|
"github.com/containerd/errdefs"
|
||||||
|
"github.com/containerd/log"
|
||||||
"github.com/opencontainers/go-digest"
|
"github.com/opencontainers/go-digest"
|
||||||
ocispec "github.com/opencontainers/image-spec/specs-go/v1"
|
ocispec "github.com/opencontainers/image-spec/specs-go/v1"
|
||||||
)
|
)
|
||||||
|
|
|
@ -21,7 +21,7 @@ import (
|
||||||
"sync"
|
"sync"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/containerd/containerd/errdefs"
|
"github.com/containerd/errdefs"
|
||||||
)
|
)
|
||||||
|
|
||||||
// Handles locking references
|
// Handles locking references
|
||||||
|
|
|
@ -22,7 +22,7 @@ import (
|
||||||
"os"
|
"os"
|
||||||
|
|
||||||
"github.com/containerd/containerd/content"
|
"github.com/containerd/containerd/content"
|
||||||
"github.com/containerd/containerd/errdefs"
|
"github.com/containerd/errdefs"
|
||||||
)
|
)
|
||||||
|
|
||||||
// readerat implements io.ReaderAt in a completely stateless manner by opening
|
// readerat implements io.ReaderAt in a completely stateless manner by opening
|
||||||
|
|
|
@ -28,10 +28,10 @@ import (
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/containerd/containerd/content"
|
"github.com/containerd/containerd/content"
|
||||||
"github.com/containerd/containerd/errdefs"
|
|
||||||
"github.com/containerd/containerd/filters"
|
"github.com/containerd/containerd/filters"
|
||||||
"github.com/containerd/containerd/log"
|
|
||||||
"github.com/containerd/containerd/pkg/randutil"
|
"github.com/containerd/containerd/pkg/randutil"
|
||||||
|
"github.com/containerd/errdefs"
|
||||||
|
"github.com/containerd/log"
|
||||||
"github.com/sirupsen/logrus"
|
"github.com/sirupsen/logrus"
|
||||||
|
|
||||||
"github.com/opencontainers/go-digest"
|
"github.com/opencontainers/go-digest"
|
||||||
|
|
|
@ -27,8 +27,8 @@ import (
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/containerd/containerd/content"
|
"github.com/containerd/containerd/content"
|
||||||
"github.com/containerd/containerd/errdefs"
|
"github.com/containerd/errdefs"
|
||||||
"github.com/containerd/containerd/log"
|
"github.com/containerd/log"
|
||||||
"github.com/opencontainers/go-digest"
|
"github.com/opencontainers/go-digest"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
|
@ -22,9 +22,9 @@ import (
|
||||||
|
|
||||||
contentapi "github.com/containerd/containerd/api/services/content/v1"
|
contentapi "github.com/containerd/containerd/api/services/content/v1"
|
||||||
"github.com/containerd/containerd/content"
|
"github.com/containerd/containerd/content"
|
||||||
"github.com/containerd/containerd/errdefs"
|
|
||||||
"github.com/containerd/containerd/protobuf"
|
"github.com/containerd/containerd/protobuf"
|
||||||
protobuftypes "github.com/containerd/containerd/protobuf/types"
|
protobuftypes "github.com/containerd/containerd/protobuf/types"
|
||||||
|
"github.com/containerd/errdefs"
|
||||||
digest "github.com/opencontainers/go-digest"
|
digest "github.com/opencontainers/go-digest"
|
||||||
ocispec "github.com/opencontainers/image-spec/specs-go/v1"
|
ocispec "github.com/opencontainers/image-spec/specs-go/v1"
|
||||||
)
|
)
|
||||||
|
|
|
@ -23,8 +23,8 @@ import (
|
||||||
|
|
||||||
contentapi "github.com/containerd/containerd/api/services/content/v1"
|
contentapi "github.com/containerd/containerd/api/services/content/v1"
|
||||||
"github.com/containerd/containerd/content"
|
"github.com/containerd/containerd/content"
|
||||||
"github.com/containerd/containerd/errdefs"
|
|
||||||
"github.com/containerd/containerd/protobuf"
|
"github.com/containerd/containerd/protobuf"
|
||||||
|
"github.com/containerd/errdefs"
|
||||||
digest "github.com/opencontainers/go-digest"
|
digest "github.com/opencontainers/go-digest"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
116
vendor/github.com/containerd/containerd/errdefs/errdefs_deprecated.go
generated
vendored
Normal file
116
vendor/github.com/containerd/containerd/errdefs/errdefs_deprecated.go
generated
vendored
Normal file
|
@ -0,0 +1,116 @@
|
||||||
|
/*
|
||||||
|
Copyright The containerd 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
// Package errdefs defines the common errors used throughout containerd
|
||||||
|
// packages.
|
||||||
|
//
|
||||||
|
// Use with fmt.Errorf to add context to an error.
|
||||||
|
//
|
||||||
|
// To detect an error class, use the IsXXX functions to tell whether an error
|
||||||
|
// is of a certain type.
|
||||||
|
//
|
||||||
|
// The functions ToGRPC and FromGRPC can be used to map server-side and
|
||||||
|
// client-side errors to the correct types.
|
||||||
|
package errdefs
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/containerd/errdefs"
|
||||||
|
)
|
||||||
|
|
||||||
|
// Definitions of common error types used throughout containerd. All containerd
|
||||||
|
// errors returned by most packages will map into one of these errors classes.
|
||||||
|
// Packages should return errors of these types when they want to instruct a
|
||||||
|
// client to take a particular action.
|
||||||
|
//
|
||||||
|
// For the most part, we just try to provide local grpc errors. Most conditions
|
||||||
|
// map very well to those defined by grpc.
|
||||||
|
var (
|
||||||
|
ErrUnknown = errdefs.ErrUnknown
|
||||||
|
ErrInvalidArgument = errdefs.ErrInvalidArgument
|
||||||
|
ErrNotFound = errdefs.ErrNotFound
|
||||||
|
ErrAlreadyExists = errdefs.ErrAlreadyExists
|
||||||
|
ErrFailedPrecondition = errdefs.ErrFailedPrecondition
|
||||||
|
ErrUnavailable = errdefs.ErrUnavailable
|
||||||
|
ErrNotImplemented = errdefs.ErrNotImplemented
|
||||||
|
)
|
||||||
|
|
||||||
|
// IsInvalidArgument returns true if the error is due to an invalid argument
|
||||||
|
func IsInvalidArgument(err error) bool {
|
||||||
|
return errdefs.IsInvalidArgument(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
// IsNotFound returns true if the error is due to a missing object
|
||||||
|
func IsNotFound(err error) bool {
|
||||||
|
return errdefs.IsNotFound(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
// IsAlreadyExists returns true if the error is due to an already existing
|
||||||
|
// metadata item
|
||||||
|
func IsAlreadyExists(err error) bool {
|
||||||
|
return errdefs.IsAlreadyExists(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
// IsFailedPrecondition returns true if an operation could not proceed to the
|
||||||
|
// lack of a particular condition
|
||||||
|
func IsFailedPrecondition(err error) bool {
|
||||||
|
return errdefs.IsFailedPrecondition(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
// IsUnavailable returns true if the error is due to a resource being unavailable
|
||||||
|
func IsUnavailable(err error) bool {
|
||||||
|
return errdefs.IsUnavailable(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
// IsNotImplemented returns true if the error is due to not being implemented
|
||||||
|
func IsNotImplemented(err error) bool {
|
||||||
|
return errdefs.IsNotImplemented(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
// IsCanceled returns true if the error is due to `context.Canceled`.
|
||||||
|
func IsCanceled(err error) bool {
|
||||||
|
return errdefs.IsCanceled(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
// IsDeadlineExceeded returns true if the error is due to
|
||||||
|
// `context.DeadlineExceeded`.
|
||||||
|
func IsDeadlineExceeded(err error) bool {
|
||||||
|
return errdefs.IsDeadlineExceeded(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
// ToGRPC will attempt to map the backend containerd error into a grpc error,
|
||||||
|
// using the original error message as a description.
|
||||||
|
//
|
||||||
|
// Further information may be extracted from certain errors depending on their
|
||||||
|
// type.
|
||||||
|
//
|
||||||
|
// If the error is unmapped, the original error will be returned to be handled
|
||||||
|
// by the regular grpc error handling stack.
|
||||||
|
func ToGRPC(err error) error {
|
||||||
|
return errdefs.ToGRPC(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
// ToGRPCf maps the error to grpc error codes, assembling the formatting string
|
||||||
|
// and combining it with the target error string.
|
||||||
|
//
|
||||||
|
// This is equivalent to errdefs.ToGRPC(fmt.Errorf("%s: %w", fmt.Sprintf(format, args...), err))
|
||||||
|
func ToGRPCf(err error, format string, args ...interface{}) error {
|
||||||
|
return errdefs.ToGRPCf(err, format, args...)
|
||||||
|
}
|
||||||
|
|
||||||
|
// FromGRPC returns the underlying error from a grpc service based on the grpc error code
|
||||||
|
func FromGRPC(err error) error {
|
||||||
|
return errdefs.FromGRPC(err)
|
||||||
|
}
|
|
@ -70,7 +70,7 @@ package filters
|
||||||
import (
|
import (
|
||||||
"regexp"
|
"regexp"
|
||||||
|
|
||||||
"github.com/containerd/containerd/log"
|
"github.com/containerd/log"
|
||||||
)
|
)
|
||||||
|
|
||||||
// Filter matches specific resources based the provided filter
|
// Filter matches specific resources based the provided filter
|
||||||
|
|
|
@ -20,7 +20,7 @@ import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
|
|
||||||
"github.com/containerd/containerd/errdefs"
|
"github.com/containerd/errdefs"
|
||||||
)
|
)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -28,7 +28,7 @@ import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"regexp"
|
"regexp"
|
||||||
|
|
||||||
"github.com/containerd/containerd/errdefs"
|
"github.com/containerd/errdefs"
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
|
|
|
@ -27,10 +27,10 @@ import (
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"github.com/containerd/containerd/content"
|
"github.com/containerd/containerd/content"
|
||||||
"github.com/containerd/containerd/errdefs"
|
|
||||||
"github.com/containerd/containerd/images"
|
"github.com/containerd/containerd/images"
|
||||||
"github.com/containerd/containerd/labels"
|
"github.com/containerd/containerd/labels"
|
||||||
"github.com/containerd/containerd/platforms"
|
"github.com/containerd/containerd/platforms"
|
||||||
|
"github.com/containerd/errdefs"
|
||||||
"github.com/containerd/log"
|
"github.com/containerd/log"
|
||||||
digest "github.com/opencontainers/go-digest"
|
digest "github.com/opencontainers/go-digest"
|
||||||
ocispecs "github.com/opencontainers/image-spec/specs-go"
|
ocispecs "github.com/opencontainers/image-spec/specs-go"
|
||||||
|
|
|
@ -29,11 +29,11 @@ import (
|
||||||
|
|
||||||
"github.com/containerd/containerd/archive/compression"
|
"github.com/containerd/containerd/archive/compression"
|
||||||
"github.com/containerd/containerd/content"
|
"github.com/containerd/containerd/content"
|
||||||
"github.com/containerd/containerd/errdefs"
|
|
||||||
"github.com/containerd/containerd/images"
|
"github.com/containerd/containerd/images"
|
||||||
"github.com/containerd/containerd/labels"
|
"github.com/containerd/containerd/labels"
|
||||||
"github.com/containerd/containerd/log"
|
|
||||||
"github.com/containerd/containerd/platforms"
|
"github.com/containerd/containerd/platforms"
|
||||||
|
"github.com/containerd/errdefs"
|
||||||
|
"github.com/containerd/log"
|
||||||
digest "github.com/opencontainers/go-digest"
|
digest "github.com/opencontainers/go-digest"
|
||||||
specs "github.com/opencontainers/image-spec/specs-go"
|
specs "github.com/opencontainers/image-spec/specs-go"
|
||||||
ocispec "github.com/opencontainers/image-spec/specs-go/v1"
|
ocispec "github.com/opencontainers/image-spec/specs-go/v1"
|
||||||
|
|
|
@ -23,8 +23,8 @@ import (
|
||||||
"sort"
|
"sort"
|
||||||
|
|
||||||
"github.com/containerd/containerd/content"
|
"github.com/containerd/containerd/content"
|
||||||
"github.com/containerd/containerd/errdefs"
|
|
||||||
"github.com/containerd/containerd/platforms"
|
"github.com/containerd/containerd/platforms"
|
||||||
|
"github.com/containerd/errdefs"
|
||||||
ocispec "github.com/opencontainers/image-spec/specs-go/v1"
|
ocispec "github.com/opencontainers/image-spec/specs-go/v1"
|
||||||
"golang.org/x/sync/errgroup"
|
"golang.org/x/sync/errgroup"
|
||||||
"golang.org/x/sync/semaphore"
|
"golang.org/x/sync/semaphore"
|
||||||
|
|
|
@ -24,9 +24,9 @@ import (
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/containerd/containerd/content"
|
"github.com/containerd/containerd/content"
|
||||||
"github.com/containerd/containerd/errdefs"
|
|
||||||
"github.com/containerd/containerd/log"
|
|
||||||
"github.com/containerd/containerd/platforms"
|
"github.com/containerd/containerd/platforms"
|
||||||
|
"github.com/containerd/errdefs"
|
||||||
|
"github.com/containerd/log"
|
||||||
digest "github.com/opencontainers/go-digest"
|
digest "github.com/opencontainers/go-digest"
|
||||||
ocispec "github.com/opencontainers/image-spec/specs-go/v1"
|
ocispec "github.com/opencontainers/image-spec/specs-go/v1"
|
||||||
)
|
)
|
||||||
|
@ -268,6 +268,9 @@ func Platforms(ctx context.Context, provider content.Provider, image ocispec.Des
|
||||||
var platformSpecs []ocispec.Platform
|
var platformSpecs []ocispec.Platform
|
||||||
return platformSpecs, Walk(ctx, Handlers(HandlerFunc(func(ctx context.Context, desc ocispec.Descriptor) ([]ocispec.Descriptor, error) {
|
return platformSpecs, Walk(ctx, Handlers(HandlerFunc(func(ctx context.Context, desc ocispec.Descriptor) ([]ocispec.Descriptor, error) {
|
||||||
if desc.Platform != nil {
|
if desc.Platform != nil {
|
||||||
|
if desc.Platform.OS == "unknown" || desc.Platform.Architecture == "unknown" {
|
||||||
|
return nil, ErrSkipDesc
|
||||||
|
}
|
||||||
platformSpecs = append(platformSpecs, *desc.Platform)
|
platformSpecs = append(platformSpecs, *desc.Platform)
|
||||||
return nil, ErrSkipDesc
|
return nil, ErrSkipDesc
|
||||||
}
|
}
|
||||||
|
|
|
@ -22,7 +22,7 @@ import (
|
||||||
"sort"
|
"sort"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"github.com/containerd/containerd/errdefs"
|
"github.com/containerd/errdefs"
|
||||||
ocispec "github.com/opencontainers/image-spec/specs-go/v1"
|
ocispec "github.com/opencontainers/image-spec/specs-go/v1"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
|
@ -19,7 +19,7 @@ package labels
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
|
||||||
"github.com/containerd/containerd/errdefs"
|
"github.com/containerd/errdefs"
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
|
|
|
@ -1,149 +0,0 @@
|
||||||
/*
|
|
||||||
Copyright The containerd 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.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package log
|
|
||||||
|
|
||||||
import (
|
|
||||||
"context"
|
|
||||||
|
|
||||||
"github.com/containerd/log"
|
|
||||||
)
|
|
||||||
|
|
||||||
// G is a shorthand for [GetLogger].
|
|
||||||
//
|
|
||||||
// Deprecated: use [log.G].
|
|
||||||
var G = log.G
|
|
||||||
|
|
||||||
// L is an alias for the standard logger.
|
|
||||||
//
|
|
||||||
// Deprecated: use [log.L].
|
|
||||||
var L = log.L
|
|
||||||
|
|
||||||
// Fields type to pass to "WithFields".
|
|
||||||
//
|
|
||||||
// Deprecated: use [log.Fields].
|
|
||||||
type Fields = log.Fields
|
|
||||||
|
|
||||||
// Entry is a logging entry.
|
|
||||||
//
|
|
||||||
// Deprecated: use [log.Entry].
|
|
||||||
type Entry = log.Entry
|
|
||||||
|
|
||||||
// RFC3339NanoFixed is [time.RFC3339Nano] with nanoseconds padded using
|
|
||||||
// zeros to ensure the formatted time is always the same number of
|
|
||||||
// characters.
|
|
||||||
//
|
|
||||||
// Deprecated: use [log.RFC3339NanoFixed].
|
|
||||||
const RFC3339NanoFixed = log.RFC3339NanoFixed
|
|
||||||
|
|
||||||
// Level is a logging level.
|
|
||||||
//
|
|
||||||
// Deprecated: use [log.Level].
|
|
||||||
type Level = log.Level
|
|
||||||
|
|
||||||
// Supported log levels.
|
|
||||||
const (
|
|
||||||
// TraceLevel level.
|
|
||||||
//
|
|
||||||
// Deprecated: use [log.TraceLevel].
|
|
||||||
TraceLevel Level = log.TraceLevel
|
|
||||||
|
|
||||||
// DebugLevel level.
|
|
||||||
//
|
|
||||||
// Deprecated: use [log.DebugLevel].
|
|
||||||
DebugLevel Level = log.DebugLevel
|
|
||||||
|
|
||||||
// InfoLevel level.
|
|
||||||
//
|
|
||||||
// Deprecated: use [log.InfoLevel].
|
|
||||||
InfoLevel Level = log.InfoLevel
|
|
||||||
|
|
||||||
// WarnLevel level.
|
|
||||||
//
|
|
||||||
// Deprecated: use [log.WarnLevel].
|
|
||||||
WarnLevel Level = log.WarnLevel
|
|
||||||
|
|
||||||
// ErrorLevel level
|
|
||||||
//
|
|
||||||
// Deprecated: use [log.ErrorLevel].
|
|
||||||
ErrorLevel Level = log.ErrorLevel
|
|
||||||
|
|
||||||
// FatalLevel level.
|
|
||||||
//
|
|
||||||
// Deprecated: use [log.FatalLevel].
|
|
||||||
FatalLevel Level = log.FatalLevel
|
|
||||||
|
|
||||||
// PanicLevel level.
|
|
||||||
//
|
|
||||||
// Deprecated: use [log.PanicLevel].
|
|
||||||
PanicLevel Level = log.PanicLevel
|
|
||||||
)
|
|
||||||
|
|
||||||
// SetLevel sets log level globally. It returns an error if the given
|
|
||||||
// level is not supported.
|
|
||||||
//
|
|
||||||
// Deprecated: use [log.SetLevel].
|
|
||||||
func SetLevel(level string) error {
|
|
||||||
return log.SetLevel(level)
|
|
||||||
}
|
|
||||||
|
|
||||||
// GetLevel returns the current log level.
|
|
||||||
//
|
|
||||||
// Deprecated: use [log.GetLevel].
|
|
||||||
func GetLevel() log.Level {
|
|
||||||
return log.GetLevel()
|
|
||||||
}
|
|
||||||
|
|
||||||
// OutputFormat specifies a log output format.
|
|
||||||
//
|
|
||||||
// Deprecated: use [log.OutputFormat].
|
|
||||||
type OutputFormat = log.OutputFormat
|
|
||||||
|
|
||||||
// Supported log output formats.
|
|
||||||
const (
|
|
||||||
// TextFormat represents the text logging format.
|
|
||||||
//
|
|
||||||
// Deprecated: use [log.TextFormat].
|
|
||||||
TextFormat log.OutputFormat = "text"
|
|
||||||
|
|
||||||
// JSONFormat represents the JSON logging format.
|
|
||||||
//
|
|
||||||
// Deprecated: use [log.JSONFormat].
|
|
||||||
JSONFormat log.OutputFormat = "json"
|
|
||||||
)
|
|
||||||
|
|
||||||
// SetFormat sets the log output format.
|
|
||||||
//
|
|
||||||
// Deprecated: use [log.SetFormat].
|
|
||||||
func SetFormat(format OutputFormat) error {
|
|
||||||
return log.SetFormat(format)
|
|
||||||
}
|
|
||||||
|
|
||||||
// WithLogger returns a new context with the provided logger. Use in
|
|
||||||
// combination with logger.WithField(s) for great effect.
|
|
||||||
//
|
|
||||||
// Deprecated: use [log.WithLogger].
|
|
||||||
func WithLogger(ctx context.Context, logger *log.Entry) context.Context {
|
|
||||||
return log.WithLogger(ctx, logger)
|
|
||||||
}
|
|
||||||
|
|
||||||
// GetLogger retrieves the current logger from the context. If no logger is
|
|
||||||
// available, the default logger is returned.
|
|
||||||
//
|
|
||||||
// Deprecated: use [log.GetLogger].
|
|
||||||
func GetLogger(ctx context.Context) *log.Entry {
|
|
||||||
return log.GetLogger(ctx)
|
|
||||||
}
|
|
|
@ -21,8 +21,8 @@ import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"os"
|
"os"
|
||||||
|
|
||||||
"github.com/containerd/containerd/errdefs"
|
|
||||||
"github.com/containerd/containerd/identifiers"
|
"github.com/containerd/containerd/identifiers"
|
||||||
|
"github.com/containerd/errdefs"
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
|
|
|
@ -20,7 +20,7 @@ import (
|
||||||
"runtime"
|
"runtime"
|
||||||
"sync"
|
"sync"
|
||||||
|
|
||||||
"github.com/containerd/containerd/log"
|
"github.com/containerd/log"
|
||||||
)
|
)
|
||||||
|
|
||||||
// Present the ARM instruction set architecture, eg: v7, v8
|
// Present the ARM instruction set architecture, eg: v7, v8
|
||||||
|
|
|
@ -24,7 +24,7 @@ import (
|
||||||
"runtime"
|
"runtime"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"github.com/containerd/containerd/errdefs"
|
"github.com/containerd/errdefs"
|
||||||
"golang.org/x/sys/unix"
|
"golang.org/x/sys/unix"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
|
@ -22,7 +22,7 @@ import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"runtime"
|
"runtime"
|
||||||
|
|
||||||
"github.com/containerd/containerd/errdefs"
|
"github.com/containerd/errdefs"
|
||||||
)
|
)
|
||||||
|
|
||||||
func getCPUVariant() (string, error) {
|
func getCPUVariant() (string, error) {
|
||||||
|
|
|
@ -116,7 +116,7 @@ import (
|
||||||
|
|
||||||
specs "github.com/opencontainers/image-spec/specs-go/v1"
|
specs "github.com/opencontainers/image-spec/specs-go/v1"
|
||||||
|
|
||||||
"github.com/containerd/containerd/errdefs"
|
"github.com/containerd/errdefs"
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
|
|
|
@ -26,9 +26,9 @@ import (
|
||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/containerd/containerd/log"
|
|
||||||
remoteserrors "github.com/containerd/containerd/remotes/errors"
|
remoteserrors "github.com/containerd/containerd/remotes/errors"
|
||||||
"github.com/containerd/containerd/version"
|
"github.com/containerd/containerd/version"
|
||||||
|
"github.com/containerd/log"
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
|
|
|
@ -25,10 +25,10 @@ import (
|
||||||
"strings"
|
"strings"
|
||||||
"sync"
|
"sync"
|
||||||
|
|
||||||
"github.com/containerd/containerd/errdefs"
|
|
||||||
"github.com/containerd/containerd/log"
|
|
||||||
"github.com/containerd/containerd/remotes/docker/auth"
|
"github.com/containerd/containerd/remotes/docker/auth"
|
||||||
remoteerrors "github.com/containerd/containerd/remotes/errors"
|
remoteerrors "github.com/containerd/containerd/remotes/errors"
|
||||||
|
"github.com/containerd/errdefs"
|
||||||
|
"github.com/containerd/log"
|
||||||
)
|
)
|
||||||
|
|
||||||
type dockerAuthorizer struct {
|
type dockerAuthorizer struct {
|
||||||
|
|
|
@ -24,8 +24,8 @@ import (
|
||||||
|
|
||||||
"github.com/containerd/containerd/content"
|
"github.com/containerd/containerd/content"
|
||||||
"github.com/containerd/containerd/images"
|
"github.com/containerd/containerd/images"
|
||||||
"github.com/containerd/containerd/log"
|
|
||||||
"github.com/containerd/containerd/remotes"
|
"github.com/containerd/containerd/remotes"
|
||||||
|
"github.com/containerd/log"
|
||||||
digest "github.com/opencontainers/go-digest"
|
digest "github.com/opencontainers/go-digest"
|
||||||
ocispec "github.com/opencontainers/image-spec/specs-go/v1"
|
ocispec "github.com/opencontainers/image-spec/specs-go/v1"
|
||||||
)
|
)
|
||||||
|
|
|
@ -24,7 +24,7 @@ import (
|
||||||
|
|
||||||
fuzz "github.com/AdaLogics/go-fuzz-headers"
|
fuzz "github.com/AdaLogics/go-fuzz-headers"
|
||||||
"github.com/containerd/containerd/content/local"
|
"github.com/containerd/containerd/content/local"
|
||||||
"github.com/containerd/containerd/log"
|
"github.com/containerd/log"
|
||||||
ocispec "github.com/opencontainers/image-spec/specs-go/v1"
|
ocispec "github.com/opencontainers/image-spec/specs-go/v1"
|
||||||
"github.com/sirupsen/logrus"
|
"github.com/sirupsen/logrus"
|
||||||
)
|
)
|
||||||
|
|
|
@ -26,9 +26,9 @@ import (
|
||||||
"net/url"
|
"net/url"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"github.com/containerd/containerd/errdefs"
|
|
||||||
"github.com/containerd/containerd/images"
|
"github.com/containerd/containerd/images"
|
||||||
"github.com/containerd/containerd/log"
|
"github.com/containerd/errdefs"
|
||||||
|
"github.com/containerd/log"
|
||||||
digest "github.com/opencontainers/go-digest"
|
digest "github.com/opencontainers/go-digest"
|
||||||
ocispec "github.com/opencontainers/image-spec/specs-go/v1"
|
ocispec "github.com/opencontainers/image-spec/specs-go/v1"
|
||||||
)
|
)
|
||||||
|
|
|
@ -25,8 +25,8 @@ import (
|
||||||
"github.com/containerd/containerd/content"
|
"github.com/containerd/containerd/content"
|
||||||
"github.com/containerd/containerd/images"
|
"github.com/containerd/containerd/images"
|
||||||
"github.com/containerd/containerd/labels"
|
"github.com/containerd/containerd/labels"
|
||||||
"github.com/containerd/containerd/log"
|
|
||||||
"github.com/containerd/containerd/reference"
|
"github.com/containerd/containerd/reference"
|
||||||
|
"github.com/containerd/log"
|
||||||
ocispec "github.com/opencontainers/image-spec/specs-go/v1"
|
ocispec "github.com/opencontainers/image-spec/specs-go/v1"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
|
@ -21,8 +21,8 @@ import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
|
|
||||||
"github.com/containerd/containerd/errdefs"
|
"github.com/containerd/errdefs"
|
||||||
"github.com/containerd/containerd/log"
|
"github.com/containerd/log"
|
||||||
)
|
)
|
||||||
|
|
||||||
const maxRetry = 3
|
const maxRetry = 3
|
||||||
|
|
|
@ -29,11 +29,11 @@ import (
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/containerd/containerd/content"
|
"github.com/containerd/containerd/content"
|
||||||
"github.com/containerd/containerd/errdefs"
|
|
||||||
"github.com/containerd/containerd/images"
|
"github.com/containerd/containerd/images"
|
||||||
"github.com/containerd/containerd/log"
|
|
||||||
"github.com/containerd/containerd/remotes"
|
"github.com/containerd/containerd/remotes"
|
||||||
remoteserrors "github.com/containerd/containerd/remotes/errors"
|
remoteserrors "github.com/containerd/containerd/remotes/errors"
|
||||||
|
"github.com/containerd/errdefs"
|
||||||
|
"github.com/containerd/log"
|
||||||
digest "github.com/opencontainers/go-digest"
|
digest "github.com/opencontainers/go-digest"
|
||||||
ocispec "github.com/opencontainers/image-spec/specs-go/v1"
|
ocispec "github.com/opencontainers/image-spec/specs-go/v1"
|
||||||
)
|
)
|
||||||
|
|
|
@ -28,15 +28,15 @@ import (
|
||||||
"path"
|
"path"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"github.com/containerd/containerd/errdefs"
|
|
||||||
"github.com/containerd/containerd/images"
|
"github.com/containerd/containerd/images"
|
||||||
"github.com/containerd/containerd/log"
|
|
||||||
"github.com/containerd/containerd/reference"
|
"github.com/containerd/containerd/reference"
|
||||||
"github.com/containerd/containerd/remotes"
|
"github.com/containerd/containerd/remotes"
|
||||||
"github.com/containerd/containerd/remotes/docker/schema1" //nolint:staticcheck // Ignore SA1019. Need to keep deprecated package for compatibility.
|
"github.com/containerd/containerd/remotes/docker/schema1" //nolint:staticcheck // Ignore SA1019. Need to keep deprecated package for compatibility.
|
||||||
remoteerrors "github.com/containerd/containerd/remotes/errors"
|
remoteerrors "github.com/containerd/containerd/remotes/errors"
|
||||||
"github.com/containerd/containerd/tracing"
|
"github.com/containerd/containerd/tracing"
|
||||||
"github.com/containerd/containerd/version"
|
"github.com/containerd/containerd/version"
|
||||||
|
"github.com/containerd/errdefs"
|
||||||
|
"github.com/containerd/log"
|
||||||
"github.com/opencontainers/go-digest"
|
"github.com/opencontainers/go-digest"
|
||||||
ocispec "github.com/opencontainers/image-spec/specs-go/v1"
|
ocispec "github.com/opencontainers/image-spec/specs-go/v1"
|
||||||
)
|
)
|
||||||
|
|
|
@ -34,11 +34,11 @@ import (
|
||||||
|
|
||||||
"github.com/containerd/containerd/archive/compression"
|
"github.com/containerd/containerd/archive/compression"
|
||||||
"github.com/containerd/containerd/content"
|
"github.com/containerd/containerd/content"
|
||||||
"github.com/containerd/containerd/errdefs"
|
|
||||||
"github.com/containerd/containerd/images"
|
"github.com/containerd/containerd/images"
|
||||||
"github.com/containerd/containerd/labels"
|
"github.com/containerd/containerd/labels"
|
||||||
"github.com/containerd/containerd/log"
|
|
||||||
"github.com/containerd/containerd/remotes"
|
"github.com/containerd/containerd/remotes"
|
||||||
|
"github.com/containerd/errdefs"
|
||||||
|
"github.com/containerd/log"
|
||||||
digest "github.com/opencontainers/go-digest"
|
digest "github.com/opencontainers/go-digest"
|
||||||
specs "github.com/opencontainers/image-spec/specs-go"
|
specs "github.com/opencontainers/image-spec/specs-go"
|
||||||
ocispec "github.com/opencontainers/image-spec/specs-go/v1"
|
ocispec "github.com/opencontainers/image-spec/specs-go/v1"
|
||||||
|
|
|
@ -21,7 +21,7 @@ import (
|
||||||
"sync"
|
"sync"
|
||||||
|
|
||||||
"github.com/containerd/containerd/content"
|
"github.com/containerd/containerd/content"
|
||||||
"github.com/containerd/containerd/errdefs"
|
"github.com/containerd/errdefs"
|
||||||
"github.com/moby/locker"
|
"github.com/moby/locker"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
|
@ -26,11 +26,11 @@ import (
|
||||||
"sync"
|
"sync"
|
||||||
|
|
||||||
"github.com/containerd/containerd/content"
|
"github.com/containerd/containerd/content"
|
||||||
"github.com/containerd/containerd/errdefs"
|
|
||||||
"github.com/containerd/containerd/images"
|
"github.com/containerd/containerd/images"
|
||||||
"github.com/containerd/containerd/labels"
|
"github.com/containerd/containerd/labels"
|
||||||
"github.com/containerd/containerd/log"
|
|
||||||
"github.com/containerd/containerd/platforms"
|
"github.com/containerd/containerd/platforms"
|
||||||
|
"github.com/containerd/errdefs"
|
||||||
|
"github.com/containerd/log"
|
||||||
ocispec "github.com/opencontainers/image-spec/specs-go/v1"
|
ocispec "github.com/opencontainers/image-spec/specs-go/v1"
|
||||||
"golang.org/x/sync/semaphore"
|
"golang.org/x/sync/semaphore"
|
||||||
)
|
)
|
||||||
|
|
|
@ -24,10 +24,10 @@ import (
|
||||||
|
|
||||||
api "github.com/containerd/containerd/api/services/content/v1"
|
api "github.com/containerd/containerd/api/services/content/v1"
|
||||||
"github.com/containerd/containerd/content"
|
"github.com/containerd/containerd/content"
|
||||||
"github.com/containerd/containerd/errdefs"
|
|
||||||
"github.com/containerd/containerd/log"
|
|
||||||
"github.com/containerd/containerd/protobuf"
|
"github.com/containerd/containerd/protobuf"
|
||||||
ptypes "github.com/containerd/containerd/protobuf/types"
|
ptypes "github.com/containerd/containerd/protobuf/types"
|
||||||
|
"github.com/containerd/errdefs"
|
||||||
|
"github.com/containerd/log"
|
||||||
digest "github.com/opencontainers/go-digest"
|
digest "github.com/opencontainers/go-digest"
|
||||||
ocispec "github.com/opencontainers/image-spec/specs-go/v1"
|
ocispec "github.com/opencontainers/image-spec/specs-go/v1"
|
||||||
"google.golang.org/grpc"
|
"google.golang.org/grpc"
|
||||||
|
|
|
@ -23,7 +23,7 @@ var (
|
||||||
Package = "github.com/containerd/containerd"
|
Package = "github.com/containerd/containerd"
|
||||||
|
|
||||||
// Version holds the complete version number. Filled in at linking time.
|
// Version holds the complete version number. Filled in at linking time.
|
||||||
Version = "1.7.17+unknown"
|
Version = "1.7.18+unknown"
|
||||||
|
|
||||||
// Revision is filled with the VCS (e.g. git) revision being used to build
|
// Revision is filled with the VCS (e.g. git) revision being used to build
|
||||||
// the program at linking time.
|
// the program at linking time.
|
||||||
|
|
|
@ -0,0 +1,191 @@
|
||||||
|
|
||||||
|
Apache License
|
||||||
|
Version 2.0, January 2004
|
||||||
|
https://www.apache.org/licenses/
|
||||||
|
|
||||||
|
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
||||||
|
|
||||||
|
1. Definitions.
|
||||||
|
|
||||||
|
"License" shall mean the terms and conditions for use, reproduction,
|
||||||
|
and distribution as defined by Sections 1 through 9 of this document.
|
||||||
|
|
||||||
|
"Licensor" shall mean the copyright owner or entity authorized by
|
||||||
|
the copyright owner that is granting the License.
|
||||||
|
|
||||||
|
"Legal Entity" shall mean the union of the acting entity and all
|
||||||
|
other entities that control, are controlled by, or are under common
|
||||||
|
control with that entity. For the purposes of this definition,
|
||||||
|
"control" means (i) the power, direct or indirect, to cause the
|
||||||
|
direction or management of such entity, whether by contract or
|
||||||
|
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
||||||
|
outstanding shares, or (iii) beneficial ownership of such entity.
|
||||||
|
|
||||||
|
"You" (or "Your") shall mean an individual or Legal Entity
|
||||||
|
exercising permissions granted by this License.
|
||||||
|
|
||||||
|
"Source" form shall mean the preferred form for making modifications,
|
||||||
|
including but not limited to software source code, documentation
|
||||||
|
source, and configuration files.
|
||||||
|
|
||||||
|
"Object" form shall mean any form resulting from mechanical
|
||||||
|
transformation or translation of a Source form, including but
|
||||||
|
not limited to compiled object code, generated documentation,
|
||||||
|
and conversions to other media types.
|
||||||
|
|
||||||
|
"Work" shall mean the work of authorship, whether in Source or
|
||||||
|
Object form, made available under the License, as indicated by a
|
||||||
|
copyright notice that is included in or attached to the work
|
||||||
|
(an example is provided in the Appendix below).
|
||||||
|
|
||||||
|
"Derivative Works" shall mean any work, whether in Source or Object
|
||||||
|
form, that is based on (or derived from) the Work and for which the
|
||||||
|
editorial revisions, annotations, elaborations, or other modifications
|
||||||
|
represent, as a whole, an original work of authorship. For the purposes
|
||||||
|
of this License, Derivative Works shall not include works that remain
|
||||||
|
separable from, or merely link (or bind by name) to the interfaces of,
|
||||||
|
the Work and Derivative Works thereof.
|
||||||
|
|
||||||
|
"Contribution" shall mean any work of authorship, including
|
||||||
|
the original version of the Work and any modifications or additions
|
||||||
|
to that Work or Derivative Works thereof, that is intentionally
|
||||||
|
submitted to Licensor for inclusion in the Work by the copyright owner
|
||||||
|
or by an individual or Legal Entity authorized to submit on behalf of
|
||||||
|
the copyright owner. For the purposes of this definition, "submitted"
|
||||||
|
means any form of electronic, verbal, or written communication sent
|
||||||
|
to the Licensor or its representatives, including but not limited to
|
||||||
|
communication on electronic mailing lists, source code control systems,
|
||||||
|
and issue tracking systems that are managed by, or on behalf of, the
|
||||||
|
Licensor for the purpose of discussing and improving the Work, but
|
||||||
|
excluding communication that is conspicuously marked or otherwise
|
||||||
|
designated in writing by the copyright owner as "Not a Contribution."
|
||||||
|
|
||||||
|
"Contributor" shall mean Licensor and any individual or Legal Entity
|
||||||
|
on behalf of whom a Contribution has been received by Licensor and
|
||||||
|
subsequently incorporated within the Work.
|
||||||
|
|
||||||
|
2. Grant of Copyright License. Subject to the terms and conditions of
|
||||||
|
this License, each Contributor hereby grants to You a perpetual,
|
||||||
|
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||||
|
copyright license to reproduce, prepare Derivative Works of,
|
||||||
|
publicly display, publicly perform, sublicense, and distribute the
|
||||||
|
Work and such Derivative Works in Source or Object form.
|
||||||
|
|
||||||
|
3. Grant of Patent License. Subject to the terms and conditions of
|
||||||
|
this License, each Contributor hereby grants to You a perpetual,
|
||||||
|
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||||
|
(except as stated in this section) patent license to make, have made,
|
||||||
|
use, offer to sell, sell, import, and otherwise transfer the Work,
|
||||||
|
where such license applies only to those patent claims licensable
|
||||||
|
by such Contributor that are necessarily infringed by their
|
||||||
|
Contribution(s) alone or by combination of their Contribution(s)
|
||||||
|
with the Work to which such Contribution(s) was submitted. If You
|
||||||
|
institute patent litigation against any entity (including a
|
||||||
|
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
||||||
|
or a Contribution incorporated within the Work constitutes direct
|
||||||
|
or contributory patent infringement, then any patent licenses
|
||||||
|
granted to You under this License for that Work shall terminate
|
||||||
|
as of the date such litigation is filed.
|
||||||
|
|
||||||
|
4. Redistribution. You may reproduce and distribute copies of the
|
||||||
|
Work or Derivative Works thereof in any medium, with or without
|
||||||
|
modifications, and in Source or Object form, provided that You
|
||||||
|
meet the following conditions:
|
||||||
|
|
||||||
|
(a) You must give any other recipients of the Work or
|
||||||
|
Derivative Works a copy of this License; and
|
||||||
|
|
||||||
|
(b) You must cause any modified files to carry prominent notices
|
||||||
|
stating that You changed the files; and
|
||||||
|
|
||||||
|
(c) You must retain, in the Source form of any Derivative Works
|
||||||
|
that You distribute, all copyright, patent, trademark, and
|
||||||
|
attribution notices from the Source form of the Work,
|
||||||
|
excluding those notices that do not pertain to any part of
|
||||||
|
the Derivative Works; and
|
||||||
|
|
||||||
|
(d) If the Work includes a "NOTICE" text file as part of its
|
||||||
|
distribution, then any Derivative Works that You distribute must
|
||||||
|
include a readable copy of the attribution notices contained
|
||||||
|
within such NOTICE file, excluding those notices that do not
|
||||||
|
pertain to any part of the Derivative Works, in at least one
|
||||||
|
of the following places: within a NOTICE text file distributed
|
||||||
|
as part of the Derivative Works; within the Source form or
|
||||||
|
documentation, if provided along with the Derivative Works; or,
|
||||||
|
within a display generated by the Derivative Works, if and
|
||||||
|
wherever such third-party notices normally appear. The contents
|
||||||
|
of the NOTICE file are for informational purposes only and
|
||||||
|
do not modify the License. You may add Your own attribution
|
||||||
|
notices within Derivative Works that You distribute, alongside
|
||||||
|
or as an addendum to the NOTICE text from the Work, provided
|
||||||
|
that such additional attribution notices cannot be construed
|
||||||
|
as modifying the License.
|
||||||
|
|
||||||
|
You may add Your own copyright statement to Your modifications and
|
||||||
|
may provide additional or different license terms and conditions
|
||||||
|
for use, reproduction, or distribution of Your modifications, or
|
||||||
|
for any such Derivative Works as a whole, provided Your use,
|
||||||
|
reproduction, and distribution of the Work otherwise complies with
|
||||||
|
the conditions stated in this License.
|
||||||
|
|
||||||
|
5. Submission of Contributions. Unless You explicitly state otherwise,
|
||||||
|
any Contribution intentionally submitted for inclusion in the Work
|
||||||
|
by You to the Licensor shall be under the terms and conditions of
|
||||||
|
this License, without any additional terms or conditions.
|
||||||
|
Notwithstanding the above, nothing herein shall supersede or modify
|
||||||
|
the terms of any separate license agreement you may have executed
|
||||||
|
with Licensor regarding such Contributions.
|
||||||
|
|
||||||
|
6. Trademarks. This License does not grant permission to use the trade
|
||||||
|
names, trademarks, service marks, or product names of the Licensor,
|
||||||
|
except as required for reasonable and customary use in describing the
|
||||||
|
origin of the Work and reproducing the content of the NOTICE file.
|
||||||
|
|
||||||
|
7. Disclaimer of Warranty. Unless required by applicable law or
|
||||||
|
agreed to in writing, Licensor provides the Work (and each
|
||||||
|
Contributor provides its Contributions) on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
||||||
|
implied, including, without limitation, any warranties or conditions
|
||||||
|
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
||||||
|
PARTICULAR PURPOSE. You are solely responsible for determining the
|
||||||
|
appropriateness of using or redistributing the Work and assume any
|
||||||
|
risks associated with Your exercise of permissions under this License.
|
||||||
|
|
||||||
|
8. Limitation of Liability. In no event and under no legal theory,
|
||||||
|
whether in tort (including negligence), contract, or otherwise,
|
||||||
|
unless required by applicable law (such as deliberate and grossly
|
||||||
|
negligent acts) or agreed to in writing, shall any Contributor be
|
||||||
|
liable to You for damages, including any direct, indirect, special,
|
||||||
|
incidental, or consequential damages of any character arising as a
|
||||||
|
result of this License or out of the use or inability to use the
|
||||||
|
Work (including but not limited to damages for loss of goodwill,
|
||||||
|
work stoppage, computer failure or malfunction, or any and all
|
||||||
|
other commercial damages or losses), even if such Contributor
|
||||||
|
has been advised of the possibility of such damages.
|
||||||
|
|
||||||
|
9. Accepting Warranty or Additional Liability. While redistributing
|
||||||
|
the Work or Derivative Works thereof, You may choose to offer,
|
||||||
|
and charge a fee for, acceptance of support, warranty, indemnity,
|
||||||
|
or other liability obligations and/or rights consistent with this
|
||||||
|
License. However, in accepting such obligations, You may act only
|
||||||
|
on Your own behalf and on Your sole responsibility, not on behalf
|
||||||
|
of any other Contributor, and only if You agree to indemnify,
|
||||||
|
defend, and hold each Contributor harmless for any liability
|
||||||
|
incurred by, or claims asserted against, such Contributor by reason
|
||||||
|
of your accepting any such warranty or additional liability.
|
||||||
|
|
||||||
|
END OF TERMS AND CONDITIONS
|
||||||
|
|
||||||
|
Copyright The containerd 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
|
||||||
|
|
||||||
|
https://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.
|
|
@ -0,0 +1,13 @@
|
||||||
|
# errdefs
|
||||||
|
|
||||||
|
A Go package for defining and checking common containerd errors.
|
||||||
|
|
||||||
|
## Project details
|
||||||
|
|
||||||
|
**errdefs** is a containerd sub-project, licensed under the [Apache 2.0 license](./LICENSE).
|
||||||
|
As a containerd sub-project, you will find the:
|
||||||
|
* [Project governance](https://github.com/containerd/project/blob/main/GOVERNANCE.md),
|
||||||
|
* [Maintainers](https://github.com/containerd/project/blob/main/MAINTAINERS),
|
||||||
|
* and [Contributing guidelines](https://github.com/containerd/project/blob/main/CONTRIBUTING.md)
|
||||||
|
|
||||||
|
information in our [`containerd/project`](https://github.com/containerd/project) repository.
|
|
@ -6,6 +6,7 @@ import (
|
||||||
|
|
||||||
"github.com/docker/cli/cli-plugins/hooks"
|
"github.com/docker/cli/cli-plugins/hooks"
|
||||||
"github.com/docker/cli/cli/command"
|
"github.com/docker/cli/cli/command"
|
||||||
|
"github.com/sirupsen/logrus"
|
||||||
"github.com/spf13/cobra"
|
"github.com/spf13/cobra"
|
||||||
"github.com/spf13/pflag"
|
"github.com/spf13/pflag"
|
||||||
)
|
)
|
||||||
|
@ -92,11 +93,35 @@ func invokeAndCollectHooks(dockerCli command.Cli, rootCmd, subCmd *cobra.Command
|
||||||
if err != nil {
|
if err != nil {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
nextSteps = append(nextSteps, processedHook...)
|
|
||||||
|
var appended bool
|
||||||
|
nextSteps, appended = appendNextSteps(nextSteps, processedHook)
|
||||||
|
if !appended {
|
||||||
|
logrus.Debugf("Plugin %s responded with an empty hook message %q. Ignoring.", pluginName, string(hookReturn))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return nextSteps
|
return nextSteps
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// appendNextSteps appends the processed hook output to the nextSteps slice.
|
||||||
|
// If the processed hook output is empty, it is not appended.
|
||||||
|
// Empty lines are not stripped if there's at least one non-empty line.
|
||||||
|
func appendNextSteps(nextSteps []string, processed []string) ([]string, bool) {
|
||||||
|
empty := true
|
||||||
|
for _, l := range processed {
|
||||||
|
if strings.TrimSpace(l) != "" {
|
||||||
|
empty = false
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if empty {
|
||||||
|
return nextSteps, false
|
||||||
|
}
|
||||||
|
|
||||||
|
return append(nextSteps, processed...), true
|
||||||
|
}
|
||||||
|
|
||||||
// pluginMatch takes a plugin configuration and a string representing the
|
// pluginMatch takes a plugin configuration and a string representing the
|
||||||
// command being executed (such as 'image ls' – the root 'docker' is omitted)
|
// command being executed (such as 'image ls' – the root 'docker' is omitted)
|
||||||
// and, if the configuration includes a hook for the invoked command, returns
|
// and, if the configuration includes a hook for the invoked command, returns
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
package formatter
|
package formatter
|
||||||
|
|
||||||
|
import "encoding/json"
|
||||||
|
|
||||||
const (
|
const (
|
||||||
// ClientContextTableFormat is the default client context format.
|
// ClientContextTableFormat is the default client context format.
|
||||||
ClientContextTableFormat = "table {{.Name}}{{if .Current}} *{{end}}\t{{.Description}}\t{{.DockerEndpoint}}\t{{.Error}}"
|
ClientContextTableFormat = "table {{.Name}}{{if .Current}} *{{end}}\t{{.Description}}\t{{.DockerEndpoint}}\t{{.Error}}"
|
||||||
|
@ -28,6 +30,13 @@ type ClientContext struct {
|
||||||
DockerEndpoint string
|
DockerEndpoint string
|
||||||
Current bool
|
Current bool
|
||||||
Error string
|
Error string
|
||||||
|
|
||||||
|
// ContextType is a temporary field for compatibility with
|
||||||
|
// Visual Studio, which depends on this from the "cloud integration"
|
||||||
|
// wrapper.
|
||||||
|
//
|
||||||
|
// Deprecated: this type is only for backward-compatibility. Do not use.
|
||||||
|
ContextType string `json:"ContextType,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// ClientContextWrite writes formatted contexts using the Context
|
// ClientContextWrite writes formatted contexts using the Context
|
||||||
|
@ -60,6 +69,13 @@ func newClientContextContext() *clientContextContext {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *clientContextContext) MarshalJSON() ([]byte, error) {
|
func (c *clientContextContext) MarshalJSON() ([]byte, error) {
|
||||||
|
if c.c.ContextType != "" {
|
||||||
|
// We only have ContextType set for plain "json" or "{{json .}}" formatting,
|
||||||
|
// so we should be able to just use the default json.Marshal with no
|
||||||
|
// special handling.
|
||||||
|
return json.Marshal(c.c)
|
||||||
|
}
|
||||||
|
// FIXME(thaJeztah): why do we need a special marshal function here?
|
||||||
return MarshalJSON(c)
|
return MarshalJSON(c)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -2179,72 +2179,129 @@ definitions:
|
||||||
type: "object"
|
type: "object"
|
||||||
properties:
|
properties:
|
||||||
Name:
|
Name:
|
||||||
|
description: |
|
||||||
|
Name of the network.
|
||||||
type: "string"
|
type: "string"
|
||||||
|
example: "my_network"
|
||||||
Id:
|
Id:
|
||||||
|
description: |
|
||||||
|
ID that uniquely identifies a network on a single machine.
|
||||||
type: "string"
|
type: "string"
|
||||||
|
example: "7d86d31b1478e7cca9ebed7e73aa0fdeec46c5ca29497431d3007d2d9e15ed99"
|
||||||
Created:
|
Created:
|
||||||
|
description: |
|
||||||
|
Date and time at which the network was created in
|
||||||
|
[RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds.
|
||||||
type: "string"
|
type: "string"
|
||||||
format: "dateTime"
|
format: "dateTime"
|
||||||
|
example: "2016-10-19T04:33:30.360899459Z"
|
||||||
Scope:
|
Scope:
|
||||||
|
description: |
|
||||||
|
The level at which the network exists (e.g. `swarm` for cluster-wide
|
||||||
|
or `local` for machine level)
|
||||||
type: "string"
|
type: "string"
|
||||||
|
example: "local"
|
||||||
Driver:
|
Driver:
|
||||||
|
description: |
|
||||||
|
The name of the driver used to create the network (e.g. `bridge`,
|
||||||
|
`overlay`).
|
||||||
type: "string"
|
type: "string"
|
||||||
|
example: "overlay"
|
||||||
EnableIPv6:
|
EnableIPv6:
|
||||||
|
description: |
|
||||||
|
Whether the network was created with IPv6 enabled.
|
||||||
type: "boolean"
|
type: "boolean"
|
||||||
|
example: false
|
||||||
IPAM:
|
IPAM:
|
||||||
$ref: "#/definitions/IPAM"
|
$ref: "#/definitions/IPAM"
|
||||||
Internal:
|
Internal:
|
||||||
|
description: |
|
||||||
|
Whether the network is created to only allow internal networking
|
||||||
|
connectivity.
|
||||||
type: "boolean"
|
type: "boolean"
|
||||||
|
default: false
|
||||||
|
example: false
|
||||||
Attachable:
|
Attachable:
|
||||||
|
description: |
|
||||||
|
Wheter a global / swarm scope network is manually attachable by regular
|
||||||
|
containers from workers in swarm mode.
|
||||||
type: "boolean"
|
type: "boolean"
|
||||||
|
default: false
|
||||||
|
example: false
|
||||||
Ingress:
|
Ingress:
|
||||||
|
description: |
|
||||||
|
Whether the network is providing the routing-mesh for the swarm cluster.
|
||||||
type: "boolean"
|
type: "boolean"
|
||||||
|
default: false
|
||||||
|
example: false
|
||||||
|
ConfigFrom:
|
||||||
|
$ref: "#/definitions/ConfigReference"
|
||||||
|
ConfigOnly:
|
||||||
|
description: |
|
||||||
|
Whether the network is a config-only network. Config-only networks are
|
||||||
|
placeholder networks for network configurations to be used by other
|
||||||
|
networks. Config-only networks cannot be used directly to run containers
|
||||||
|
or services.
|
||||||
|
type: "boolean"
|
||||||
|
default: false
|
||||||
Containers:
|
Containers:
|
||||||
|
description: |
|
||||||
|
Contains endpoints attached to the network.
|
||||||
type: "object"
|
type: "object"
|
||||||
additionalProperties:
|
additionalProperties:
|
||||||
$ref: "#/definitions/NetworkContainer"
|
$ref: "#/definitions/NetworkContainer"
|
||||||
|
example:
|
||||||
|
19a4d5d687db25203351ed79d478946f861258f018fe384f229f2efa4b23513c:
|
||||||
|
Name: "test"
|
||||||
|
EndpointID: "628cadb8bcb92de107b2a1e516cbffe463e321f548feb37697cce00ad694f21a"
|
||||||
|
MacAddress: "02:42:ac:13:00:02"
|
||||||
|
IPv4Address: "172.19.0.2/16"
|
||||||
|
IPv6Address: ""
|
||||||
Options:
|
Options:
|
||||||
|
description: |
|
||||||
|
Network-specific options uses when creating the network.
|
||||||
type: "object"
|
type: "object"
|
||||||
additionalProperties:
|
additionalProperties:
|
||||||
type: "string"
|
type: "string"
|
||||||
|
example:
|
||||||
|
com.docker.network.bridge.default_bridge: "true"
|
||||||
|
com.docker.network.bridge.enable_icc: "true"
|
||||||
|
com.docker.network.bridge.enable_ip_masquerade: "true"
|
||||||
|
com.docker.network.bridge.host_binding_ipv4: "0.0.0.0"
|
||||||
|
com.docker.network.bridge.name: "docker0"
|
||||||
|
com.docker.network.driver.mtu: "1500"
|
||||||
Labels:
|
Labels:
|
||||||
|
description: "User-defined key/value metadata."
|
||||||
type: "object"
|
type: "object"
|
||||||
additionalProperties:
|
additionalProperties:
|
||||||
type: "string"
|
type: "string"
|
||||||
example:
|
example:
|
||||||
Name: "net01"
|
com.example.some-label: "some-value"
|
||||||
Id: "7d86d31b1478e7cca9ebed7e73aa0fdeec46c5ca29497431d3007d2d9e15ed99"
|
com.example.some-other-label: "some-other-value"
|
||||||
Created: "2016-10-19T04:33:30.360899459Z"
|
Peers:
|
||||||
Scope: "local"
|
description: |
|
||||||
Driver: "bridge"
|
List of peer nodes for an overlay network. This field is only present
|
||||||
EnableIPv6: false
|
for overlay networks, and omitted for other network types.
|
||||||
IPAM:
|
type: "array"
|
||||||
Driver: "default"
|
items:
|
||||||
Config:
|
$ref: "#/definitions/PeerInfo"
|
||||||
- Subnet: "172.19.0.0/16"
|
x-nullable: true
|
||||||
Gateway: "172.19.0.1"
|
# TODO: Add Services (only present when "verbose" is set).
|
||||||
Options:
|
|
||||||
foo: "bar"
|
ConfigReference:
|
||||||
Internal: false
|
description: |
|
||||||
Attachable: false
|
The config-only network source to provide the configuration for
|
||||||
Ingress: false
|
this network.
|
||||||
Containers:
|
type: "object"
|
||||||
19a4d5d687db25203351ed79d478946f861258f018fe384f229f2efa4b23513c:
|
properties:
|
||||||
Name: "test"
|
Network:
|
||||||
EndpointID: "628cadb8bcb92de107b2a1e516cbffe463e321f548feb37697cce00ad694f21a"
|
description: |
|
||||||
MacAddress: "02:42:ac:13:00:02"
|
The name of the config-only network that provides the network's
|
||||||
IPv4Address: "172.19.0.2/16"
|
configuration. The specified network must be an existing config-only
|
||||||
IPv6Address: ""
|
network. Only network names are allowed, not network IDs.
|
||||||
Options:
|
type: "string"
|
||||||
com.docker.network.bridge.default_bridge: "true"
|
example: "config_only_network_01"
|
||||||
com.docker.network.bridge.enable_icc: "true"
|
|
||||||
com.docker.network.bridge.enable_ip_masquerade: "true"
|
|
||||||
com.docker.network.bridge.host_binding_ipv4: "0.0.0.0"
|
|
||||||
com.docker.network.bridge.name: "docker0"
|
|
||||||
com.docker.network.driver.mtu: "1500"
|
|
||||||
Labels:
|
|
||||||
com.example.some-label: "some-value"
|
|
||||||
com.example.some-other-label: "some-other-value"
|
|
||||||
IPAM:
|
IPAM:
|
||||||
type: "object"
|
type: "object"
|
||||||
properties:
|
properties:
|
||||||
|
@ -2252,6 +2309,7 @@ definitions:
|
||||||
description: "Name of the IPAM driver to use."
|
description: "Name of the IPAM driver to use."
|
||||||
type: "string"
|
type: "string"
|
||||||
default: "default"
|
default: "default"
|
||||||
|
example: "default"
|
||||||
Config:
|
Config:
|
||||||
description: |
|
description: |
|
||||||
List of IPAM configuration options, specified as a map:
|
List of IPAM configuration options, specified as a map:
|
||||||
|
@ -2267,16 +2325,21 @@ definitions:
|
||||||
type: "object"
|
type: "object"
|
||||||
additionalProperties:
|
additionalProperties:
|
||||||
type: "string"
|
type: "string"
|
||||||
|
example:
|
||||||
|
foo: "bar"
|
||||||
|
|
||||||
IPAMConfig:
|
IPAMConfig:
|
||||||
type: "object"
|
type: "object"
|
||||||
properties:
|
properties:
|
||||||
Subnet:
|
Subnet:
|
||||||
type: "string"
|
type: "string"
|
||||||
|
example: "172.20.0.0/16"
|
||||||
IPRange:
|
IPRange:
|
||||||
type: "string"
|
type: "string"
|
||||||
|
example: "172.20.10.0/24"
|
||||||
Gateway:
|
Gateway:
|
||||||
type: "string"
|
type: "string"
|
||||||
|
example: "172.20.10.11"
|
||||||
AuxiliaryAddresses:
|
AuxiliaryAddresses:
|
||||||
type: "object"
|
type: "object"
|
||||||
additionalProperties:
|
additionalProperties:
|
||||||
|
@ -2287,14 +2350,35 @@ definitions:
|
||||||
properties:
|
properties:
|
||||||
Name:
|
Name:
|
||||||
type: "string"
|
type: "string"
|
||||||
|
example: "container_1"
|
||||||
EndpointID:
|
EndpointID:
|
||||||
type: "string"
|
type: "string"
|
||||||
|
example: "628cadb8bcb92de107b2a1e516cbffe463e321f548feb37697cce00ad694f21a"
|
||||||
MacAddress:
|
MacAddress:
|
||||||
type: "string"
|
type: "string"
|
||||||
|
example: "02:42:ac:13:00:02"
|
||||||
IPv4Address:
|
IPv4Address:
|
||||||
type: "string"
|
type: "string"
|
||||||
|
example: "172.19.0.2/16"
|
||||||
IPv6Address:
|
IPv6Address:
|
||||||
type: "string"
|
type: "string"
|
||||||
|
example: ""
|
||||||
|
|
||||||
|
PeerInfo:
|
||||||
|
description: |
|
||||||
|
PeerInfo represents one peer of an overlay network.
|
||||||
|
type: "object"
|
||||||
|
properties:
|
||||||
|
Name:
|
||||||
|
description:
|
||||||
|
ID of the peer-node in the Swarm cluster.
|
||||||
|
type: "string"
|
||||||
|
example: "6869d7c1732b"
|
||||||
|
IP:
|
||||||
|
description:
|
||||||
|
IP-address of the peer-node in the Swarm cluster.
|
||||||
|
type: "string"
|
||||||
|
example: "10.133.77.91"
|
||||||
|
|
||||||
BuildInfo:
|
BuildInfo:
|
||||||
type: "object"
|
type: "object"
|
||||||
|
@ -10104,14 +10188,22 @@ paths:
|
||||||
Name:
|
Name:
|
||||||
description: "The network's name."
|
description: "The network's name."
|
||||||
type: "string"
|
type: "string"
|
||||||
|
example: "my_network"
|
||||||
CheckDuplicate:
|
CheckDuplicate:
|
||||||
description: |
|
description: |
|
||||||
Deprecated: CheckDuplicate is now always enabled.
|
Deprecated: CheckDuplicate is now always enabled.
|
||||||
type: "boolean"
|
type: "boolean"
|
||||||
|
example: true
|
||||||
Driver:
|
Driver:
|
||||||
description: "Name of the network driver plugin to use."
|
description: "Name of the network driver plugin to use."
|
||||||
type: "string"
|
type: "string"
|
||||||
default: "bridge"
|
default: "bridge"
|
||||||
|
example: "bridge"
|
||||||
|
Scope:
|
||||||
|
description: |
|
||||||
|
The level at which the network exists (e.g. `swarm` for cluster-wide
|
||||||
|
or `local` for machine level).
|
||||||
|
type: "string"
|
||||||
Internal:
|
Internal:
|
||||||
description: "Restrict external access to the network."
|
description: "Restrict external access to the network."
|
||||||
type: "boolean"
|
type: "boolean"
|
||||||
|
@ -10120,55 +10212,55 @@ paths:
|
||||||
Globally scoped network is manually attachable by regular
|
Globally scoped network is manually attachable by regular
|
||||||
containers from workers in swarm mode.
|
containers from workers in swarm mode.
|
||||||
type: "boolean"
|
type: "boolean"
|
||||||
|
example: true
|
||||||
Ingress:
|
Ingress:
|
||||||
description: |
|
description: |
|
||||||
Ingress network is the network which provides the routing-mesh
|
Ingress network is the network which provides the routing-mesh
|
||||||
in swarm mode.
|
in swarm mode.
|
||||||
type: "boolean"
|
type: "boolean"
|
||||||
|
example: false
|
||||||
|
ConfigOnly:
|
||||||
|
description: |
|
||||||
|
Creates a config-only network. Config-only networks are placeholder
|
||||||
|
networks for network configurations to be used by other networks.
|
||||||
|
Config-only networks cannot be used directly to run containers
|
||||||
|
or services.
|
||||||
|
type: "boolean"
|
||||||
|
default: false
|
||||||
|
example: false
|
||||||
|
ConfigFrom:
|
||||||
|
description: |
|
||||||
|
Specifies the source which will provide the configuration for
|
||||||
|
this network. The specified network must be an existing
|
||||||
|
config-only network; see ConfigOnly.
|
||||||
|
$ref: "#/definitions/ConfigReference"
|
||||||
IPAM:
|
IPAM:
|
||||||
description: "Optional custom IP scheme for the network."
|
description: "Optional custom IP scheme for the network."
|
||||||
$ref: "#/definitions/IPAM"
|
$ref: "#/definitions/IPAM"
|
||||||
EnableIPv6:
|
EnableIPv6:
|
||||||
description: "Enable IPv6 on the network."
|
description: "Enable IPv6 on the network."
|
||||||
type: "boolean"
|
type: "boolean"
|
||||||
|
example: true
|
||||||
Options:
|
Options:
|
||||||
description: "Network specific options to be used by the drivers."
|
description: "Network specific options to be used by the drivers."
|
||||||
type: "object"
|
type: "object"
|
||||||
additionalProperties:
|
additionalProperties:
|
||||||
type: "string"
|
type: "string"
|
||||||
|
example:
|
||||||
|
com.docker.network.bridge.default_bridge: "true"
|
||||||
|
com.docker.network.bridge.enable_icc: "true"
|
||||||
|
com.docker.network.bridge.enable_ip_masquerade: "true"
|
||||||
|
com.docker.network.bridge.host_binding_ipv4: "0.0.0.0"
|
||||||
|
com.docker.network.bridge.name: "docker0"
|
||||||
|
com.docker.network.driver.mtu: "1500"
|
||||||
Labels:
|
Labels:
|
||||||
description: "User-defined key/value metadata."
|
description: "User-defined key/value metadata."
|
||||||
type: "object"
|
type: "object"
|
||||||
additionalProperties:
|
additionalProperties:
|
||||||
type: "string"
|
type: "string"
|
||||||
example:
|
example:
|
||||||
Name: "isolated_nw"
|
com.example.some-label: "some-value"
|
||||||
CheckDuplicate: false
|
com.example.some-other-label: "some-other-value"
|
||||||
Driver: "bridge"
|
|
||||||
EnableIPv6: true
|
|
||||||
IPAM:
|
|
||||||
Driver: "default"
|
|
||||||
Config:
|
|
||||||
- Subnet: "172.20.0.0/16"
|
|
||||||
IPRange: "172.20.10.0/24"
|
|
||||||
Gateway: "172.20.10.11"
|
|
||||||
- Subnet: "2001:db8:abcd::/64"
|
|
||||||
Gateway: "2001:db8:abcd::1011"
|
|
||||||
Options:
|
|
||||||
foo: "bar"
|
|
||||||
Internal: true
|
|
||||||
Attachable: false
|
|
||||||
Ingress: false
|
|
||||||
Options:
|
|
||||||
com.docker.network.bridge.default_bridge: "true"
|
|
||||||
com.docker.network.bridge.enable_icc: "true"
|
|
||||||
com.docker.network.bridge.enable_ip_masquerade: "true"
|
|
||||||
com.docker.network.bridge.host_binding_ipv4: "0.0.0.0"
|
|
||||||
com.docker.network.bridge.name: "docker0"
|
|
||||||
com.docker.network.driver.mtu: "1500"
|
|
||||||
Labels:
|
|
||||||
com.example.some-label: "some-value"
|
|
||||||
com.example.some-other-label: "some-other-value"
|
|
||||||
tags: ["Network"]
|
tags: ["Network"]
|
||||||
|
|
||||||
/networks/{id}/connect:
|
/networks/{id}/connect:
|
||||||
|
|
|
@ -457,24 +457,24 @@ type EndpointResource struct {
|
||||||
type NetworkCreate struct {
|
type NetworkCreate struct {
|
||||||
// Deprecated: CheckDuplicate is deprecated since API v1.44, but it defaults to true when sent by the client
|
// Deprecated: CheckDuplicate is deprecated since API v1.44, but it defaults to true when sent by the client
|
||||||
// package to older daemons.
|
// package to older daemons.
|
||||||
CheckDuplicate bool `json:",omitempty"`
|
CheckDuplicate bool `json:",omitempty"`
|
||||||
Driver string
|
Driver string // Driver is the driver-name used to create the network (e.g. `bridge`, `overlay`)
|
||||||
Scope string
|
Scope string // Scope describes the level at which the network exists (e.g. `swarm` for cluster-wide or `local` for machine level).
|
||||||
EnableIPv6 bool
|
EnableIPv6 bool // EnableIPv6 represents whether to enable IPv6.
|
||||||
IPAM *network.IPAM
|
IPAM *network.IPAM // IPAM is the network's IP Address Management.
|
||||||
Internal bool
|
Internal bool // Internal represents if the network is used internal only.
|
||||||
Attachable bool
|
Attachable bool // Attachable represents if the global scope is manually attachable by regular containers from workers in swarm mode.
|
||||||
Ingress bool
|
Ingress bool // Ingress indicates the network is providing the routing-mesh for the swarm cluster.
|
||||||
ConfigOnly bool
|
ConfigOnly bool // ConfigOnly creates a config-only network. Config-only networks are place-holder networks for network configurations to be used by other networks. ConfigOnly networks cannot be used directly to run containers or services.
|
||||||
ConfigFrom *network.ConfigReference
|
ConfigFrom *network.ConfigReference // ConfigFrom specifies the source which will provide the configuration for this network. The specified network must be a config-only network; see [NetworkCreate.ConfigOnly].
|
||||||
Options map[string]string
|
Options map[string]string // Options specifies the network-specific options to use for when creating the network.
|
||||||
Labels map[string]string
|
Labels map[string]string // Labels holds metadata specific to the network being created.
|
||||||
}
|
}
|
||||||
|
|
||||||
// NetworkCreateRequest is the request message sent to the server for network create call.
|
// NetworkCreateRequest is the request message sent to the server for network create call.
|
||||||
type NetworkCreateRequest struct {
|
type NetworkCreateRequest struct {
|
||||||
NetworkCreate
|
NetworkCreate
|
||||||
Name string
|
Name string // Name is the requested name of the network.
|
||||||
}
|
}
|
||||||
|
|
||||||
// NetworkCreateResponse is the response message sent by the server for network create call
|
// NetworkCreateResponse is the response message sent by the server for network create call
|
||||||
|
|
|
@ -338,7 +338,7 @@ func Parse(rwc io.Reader) (*Result, error) {
|
||||||
warnings = append(warnings, Warning{
|
warnings = append(warnings, Warning{
|
||||||
Short: "Empty continuation line found in: " + line,
|
Short: "Empty continuation line found in: " + line,
|
||||||
Detail: [][]byte{[]byte("Empty continuation lines will become errors in a future release")},
|
Detail: [][]byte{[]byte("Empty continuation lines will become errors in a future release")},
|
||||||
URL: "https://github.com/moby/moby/pull/33719",
|
URL: "https://docs.docker.com/go/dockerfile/rule/no-empty-continuations/",
|
||||||
Location: &Range{Start: Position{Line: currentLine}, End: Position{Line: currentLine}},
|
Location: &Range{Start: Position{Line: currentLine}, End: Position{Line: currentLine}},
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
|
@ -169,10 +169,12 @@ func PrintLintViolations(dt []byte, w io.Writer) error {
|
||||||
})
|
})
|
||||||
|
|
||||||
for _, warning := range results.Warnings {
|
for _, warning := range results.Warnings {
|
||||||
fmt.Fprintf(w, "\n- %s\n%s\n", warning.Detail, warning.Description)
|
fmt.Fprintf(w, "%s", warning.RuleName)
|
||||||
if warning.URL != "" {
|
if warning.URL != "" {
|
||||||
fmt.Fprintf(w, "URL: %s\n", warning.URL)
|
fmt.Fprintf(w, " - %s", warning.URL)
|
||||||
}
|
}
|
||||||
|
fmt.Fprintf(w, "\n%s\n", warning.Description)
|
||||||
|
|
||||||
if warning.Location.SourceIndex < 0 {
|
if warning.Location.SourceIndex < 0 {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
@ -185,6 +187,7 @@ func PrintLintViolations(dt []byte, w io.Writer) error {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
fmt.Fprintln(w)
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,8 +5,8 @@ import (
|
||||||
|
|
||||||
api "github.com/containerd/containerd/api/services/content/v1"
|
api "github.com/containerd/containerd/api/services/content/v1"
|
||||||
"github.com/containerd/containerd/content"
|
"github.com/containerd/containerd/content"
|
||||||
"github.com/containerd/containerd/errdefs"
|
|
||||||
"github.com/containerd/containerd/services/content/contentserver"
|
"github.com/containerd/containerd/services/content/contentserver"
|
||||||
|
cerrdefs "github.com/containerd/errdefs"
|
||||||
"github.com/moby/buildkit/session"
|
"github.com/moby/buildkit/session"
|
||||||
digest "github.com/opencontainers/go-digest"
|
digest "github.com/opencontainers/go-digest"
|
||||||
ocispecs "github.com/opencontainers/image-spec/specs-go/v1"
|
ocispecs "github.com/opencontainers/image-spec/specs-go/v1"
|
||||||
|
@ -25,17 +25,17 @@ type attachableContentStore struct {
|
||||||
func (cs *attachableContentStore) choose(ctx context.Context) (content.Store, error) {
|
func (cs *attachableContentStore) choose(ctx context.Context) (content.Store, error) {
|
||||||
md, ok := metadata.FromIncomingContext(ctx)
|
md, ok := metadata.FromIncomingContext(ctx)
|
||||||
if !ok {
|
if !ok {
|
||||||
return nil, errors.Wrap(errdefs.ErrInvalidArgument, "request lacks metadata")
|
return nil, errors.Wrap(cerrdefs.ErrInvalidArgument, "request lacks metadata")
|
||||||
}
|
}
|
||||||
|
|
||||||
values := md[GRPCHeaderID]
|
values := md[GRPCHeaderID]
|
||||||
if len(values) == 0 {
|
if len(values) == 0 {
|
||||||
return nil, errors.Wrapf(errdefs.ErrInvalidArgument, "request lacks metadata %q", GRPCHeaderID)
|
return nil, errors.Wrapf(cerrdefs.ErrInvalidArgument, "request lacks metadata %q", GRPCHeaderID)
|
||||||
}
|
}
|
||||||
id := values[0]
|
id := values[0]
|
||||||
store, ok := cs.stores[id]
|
store, ok := cs.stores[id]
|
||||||
if !ok {
|
if !ok {
|
||||||
return nil, errors.Wrapf(errdefs.ErrNotFound, "unknown store %s", id)
|
return nil, errors.Wrapf(cerrdefs.ErrNotFound, "unknown store %s", id)
|
||||||
}
|
}
|
||||||
return store, nil
|
return store, nil
|
||||||
}
|
}
|
||||||
|
|
|
@ -9,7 +9,7 @@ import (
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/containerd/containerd/content"
|
"github.com/containerd/containerd/content"
|
||||||
"github.com/containerd/containerd/errdefs"
|
cerrdefs "github.com/containerd/errdefs"
|
||||||
digest "github.com/opencontainers/go-digest"
|
digest "github.com/opencontainers/go-digest"
|
||||||
ocispecs "github.com/opencontainers/image-spec/specs-go/v1"
|
ocispecs "github.com/opencontainers/image-spec/specs-go/v1"
|
||||||
"github.com/pkg/errors"
|
"github.com/pkg/errors"
|
||||||
|
@ -43,7 +43,7 @@ func (b *buffer) Info(ctx context.Context, dgst digest.Digest) (content.Info, er
|
||||||
v, ok := b.infos[dgst]
|
v, ok := b.infos[dgst]
|
||||||
b.mu.Unlock()
|
b.mu.Unlock()
|
||||||
if !ok {
|
if !ok {
|
||||||
return content.Info{}, errdefs.ErrNotFound
|
return content.Info{}, cerrdefs.ErrNotFound
|
||||||
}
|
}
|
||||||
return v, nil
|
return v, nil
|
||||||
}
|
}
|
||||||
|
@ -54,7 +54,7 @@ func (b *buffer) Update(ctx context.Context, new content.Info, fieldpaths ...str
|
||||||
|
|
||||||
updated, ok := b.infos[new.Digest]
|
updated, ok := b.infos[new.Digest]
|
||||||
if !ok {
|
if !ok {
|
||||||
return content.Info{}, errdefs.ErrNotFound
|
return content.Info{}, cerrdefs.ErrNotFound
|
||||||
}
|
}
|
||||||
|
|
||||||
if len(fieldpaths) == 0 {
|
if len(fieldpaths) == 0 {
|
||||||
|
@ -96,7 +96,7 @@ func (b *buffer) Writer(ctx context.Context, opts ...content.WriterOpt) (content
|
||||||
}
|
}
|
||||||
b.mu.Lock()
|
b.mu.Lock()
|
||||||
if _, ok := b.refs[wOpts.Ref]; ok {
|
if _, ok := b.refs[wOpts.Ref]; ok {
|
||||||
return nil, errors.Wrapf(errdefs.ErrUnavailable, "ref %s locked", wOpts.Ref)
|
return nil, errors.Wrapf(cerrdefs.ErrUnavailable, "ref %s locked", wOpts.Ref)
|
||||||
}
|
}
|
||||||
b.mu.Unlock()
|
b.mu.Unlock()
|
||||||
return &bufferedWriter{
|
return &bufferedWriter{
|
||||||
|
@ -128,7 +128,7 @@ func (b *buffer) getBytesReader(dgst digest.Digest) (*bytes.Reader, error) {
|
||||||
return bytes.NewReader(dt), nil
|
return bytes.NewReader(dt), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil, errors.Wrapf(errdefs.ErrNotFound, "content %v", dgst)
|
return nil, errors.Wrapf(cerrdefs.ErrNotFound, "content %v", dgst)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (b *buffer) addValue(k digest.Digest, dt []byte) {
|
func (b *buffer) addValue(k digest.Digest, dt []byte) {
|
||||||
|
|
|
@ -5,7 +5,7 @@ import (
|
||||||
"sync"
|
"sync"
|
||||||
|
|
||||||
"github.com/containerd/containerd/content"
|
"github.com/containerd/containerd/content"
|
||||||
"github.com/containerd/containerd/errdefs"
|
cerrdefs "github.com/containerd/errdefs"
|
||||||
"github.com/moby/buildkit/session"
|
"github.com/moby/buildkit/session"
|
||||||
digest "github.com/opencontainers/go-digest"
|
digest "github.com/opencontainers/go-digest"
|
||||||
ocispecs "github.com/opencontainers/image-spec/specs-go/v1"
|
ocispecs "github.com/opencontainers/image-spec/specs-go/v1"
|
||||||
|
@ -60,7 +60,7 @@ func (mp *MultiProvider) ReaderAt(ctx context.Context, desc ocispecs.Descriptor)
|
||||||
}
|
}
|
||||||
mp.mu.RUnlock()
|
mp.mu.RUnlock()
|
||||||
if mp.base == nil {
|
if mp.base == nil {
|
||||||
return nil, errors.Wrapf(errdefs.ErrNotFound, "content %v", desc.Digest)
|
return nil, errors.Wrapf(cerrdefs.ErrNotFound, "content %v", desc.Digest)
|
||||||
}
|
}
|
||||||
return mp.base.ReaderAt(ctx, desc)
|
return mp.base.ReaderAt(ctx, desc)
|
||||||
}
|
}
|
||||||
|
@ -74,7 +74,7 @@ func (mp *MultiProvider) Info(ctx context.Context, dgst digest.Digest) (content.
|
||||||
}
|
}
|
||||||
mp.mu.RUnlock()
|
mp.mu.RUnlock()
|
||||||
if mp.base == nil {
|
if mp.base == nil {
|
||||||
return content.Info{}, errors.Wrapf(errdefs.ErrNotFound, "content %v", dgst)
|
return content.Info{}, errors.Wrapf(cerrdefs.ErrNotFound, "content %v", dgst)
|
||||||
}
|
}
|
||||||
return mp.base.Info(ctx, dgst)
|
return mp.base.Info(ctx, dgst)
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,8 +7,8 @@ import (
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/containerd/containerd/content"
|
"github.com/containerd/containerd/content"
|
||||||
"github.com/containerd/containerd/errdefs"
|
|
||||||
"github.com/containerd/containerd/remotes"
|
"github.com/containerd/containerd/remotes"
|
||||||
|
cerrdefs "github.com/containerd/errdefs"
|
||||||
digest "github.com/opencontainers/go-digest"
|
digest "github.com/opencontainers/go-digest"
|
||||||
"github.com/pkg/errors"
|
"github.com/pkg/errors"
|
||||||
)
|
)
|
||||||
|
@ -41,7 +41,7 @@ func (i *pushingIngester) Writer(ctx context.Context, opts ...content.WriterOpt)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if wOpts.Ref == "" {
|
if wOpts.Ref == "" {
|
||||||
return nil, errors.Wrap(errdefs.ErrInvalidArgument, "ref must not be empty")
|
return nil, errors.Wrap(cerrdefs.ErrInvalidArgument, "ref must not be empty")
|
||||||
}
|
}
|
||||||
|
|
||||||
st := time.Now()
|
st := time.Now()
|
||||||
|
@ -50,7 +50,7 @@ func (i *pushingIngester) Writer(ctx context.Context, opts ...content.WriterOpt)
|
||||||
for {
|
for {
|
||||||
if time.Since(st) > time.Hour {
|
if time.Since(st) > time.Hour {
|
||||||
i.mu.Unlock()
|
i.mu.Unlock()
|
||||||
return nil, errors.Wrapf(errdefs.ErrUnavailable, "ref %v locked", wOpts.Desc.Digest)
|
return nil, errors.Wrapf(cerrdefs.ErrUnavailable, "ref %v locked", wOpts.Desc.Digest)
|
||||||
}
|
}
|
||||||
if _, ok := i.active[wOpts.Desc.Digest]; ok {
|
if _, ok := i.active[wOpts.Desc.Digest]; ok {
|
||||||
i.c.Wait()
|
i.c.Wait()
|
||||||
|
|
|
@ -6,9 +6,9 @@ import (
|
||||||
"sync"
|
"sync"
|
||||||
|
|
||||||
"github.com/containerd/containerd/content"
|
"github.com/containerd/containerd/content"
|
||||||
"github.com/containerd/containerd/errdefs"
|
|
||||||
"github.com/containerd/containerd/remotes"
|
"github.com/containerd/containerd/remotes"
|
||||||
"github.com/containerd/containerd/remotes/docker"
|
"github.com/containerd/containerd/remotes/docker"
|
||||||
|
cerrdefs "github.com/containerd/errdefs"
|
||||||
"github.com/moby/buildkit/version"
|
"github.com/moby/buildkit/version"
|
||||||
"github.com/moby/locker"
|
"github.com/moby/locker"
|
||||||
digest "github.com/opencontainers/go-digest"
|
digest "github.com/opencontainers/go-digest"
|
||||||
|
@ -70,7 +70,7 @@ func (w *ingester) Writer(ctx context.Context, opts ...content.WriterOpt) (conte
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if wo.Ref == "" {
|
if wo.Ref == "" {
|
||||||
return nil, errors.Wrap(errdefs.ErrInvalidArgument, "ref must not be empty")
|
return nil, errors.Wrap(cerrdefs.ErrInvalidArgument, "ref must not be empty")
|
||||||
}
|
}
|
||||||
w.locker.Lock(wo.Ref)
|
w.locker.Lock(wo.Ref)
|
||||||
var once sync.Once
|
var once sync.Once
|
||||||
|
|
|
@ -4,7 +4,7 @@ import (
|
||||||
"net/url"
|
"net/url"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"github.com/containerd/containerd/errdefs"
|
cerrdefs "github.com/containerd/errdefs"
|
||||||
"github.com/pkg/errors"
|
"github.com/pkg/errors"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -58,7 +58,7 @@ func ParseGitRef(ref string) (*GitRef, error) {
|
||||||
)
|
)
|
||||||
|
|
||||||
if strings.HasPrefix(ref, "./") || strings.HasPrefix(ref, "../") {
|
if strings.HasPrefix(ref, "./") || strings.HasPrefix(ref, "../") {
|
||||||
return nil, errdefs.ErrInvalidArgument
|
return nil, cerrdefs.ErrInvalidArgument
|
||||||
} else if strings.HasPrefix(ref, "github.com/") {
|
} else if strings.HasPrefix(ref, "github.com/") {
|
||||||
res.IndistinguishableFromLocal = true // Deprecated
|
res.IndistinguishableFromLocal = true // Deprecated
|
||||||
remote = fromURL(&url.URL{
|
remote = fromURL(&url.URL{
|
||||||
|
@ -84,7 +84,7 @@ func ParseGitRef(ref string) (*GitRef, error) {
|
||||||
// An HTTP(S) URL is considered to be a valid git ref only when it has the ".git[...]" suffix.
|
// An HTTP(S) URL is considered to be a valid git ref only when it has the ".git[...]" suffix.
|
||||||
case HTTPProtocol, HTTPSProtocol:
|
case HTTPProtocol, HTTPSProtocol:
|
||||||
if !strings.HasSuffix(remote.Path, ".git") {
|
if !strings.HasSuffix(remote.Path, ".git") {
|
||||||
return nil, errdefs.ErrInvalidArgument
|
return nil, cerrdefs.ErrInvalidArgument
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -46,22 +46,23 @@ func Helper() {
|
||||||
func Traces(err error) []*Stack {
|
func Traces(err error) []*Stack {
|
||||||
var st []*Stack
|
var st []*Stack
|
||||||
|
|
||||||
wrapped, ok := err.(interface {
|
switch e := err.(type) {
|
||||||
Unwrap() error
|
case interface{ Unwrap() error }:
|
||||||
})
|
st = Traces(e.Unwrap())
|
||||||
if ok {
|
case interface{ Unwrap() []error }:
|
||||||
st = Traces(wrapped.Unwrap())
|
for _, ue := range e.Unwrap() {
|
||||||
|
st = Traces(ue)
|
||||||
|
// Only take first stack
|
||||||
|
if len(st) > 0 {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ste, ok := err.(interface {
|
switch ste := err.(type) {
|
||||||
StackTrace() errors.StackTrace
|
case interface{ StackTrace() errors.StackTrace }:
|
||||||
}); ok {
|
|
||||||
st = append(st, convertStack(ste.StackTrace()))
|
st = append(st, convertStack(ste.StackTrace()))
|
||||||
}
|
case interface{ StackTrace() *Stack }:
|
||||||
|
|
||||||
if ste, ok := err.(interface {
|
|
||||||
StackTrace() *Stack
|
|
||||||
}); ok {
|
|
||||||
st = append(st, ste.StackTrace())
|
st = append(st, ste.StackTrace())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -6,7 +6,6 @@ import (
|
||||||
"net/http"
|
"net/http"
|
||||||
"net/http/httptrace"
|
"net/http/httptrace"
|
||||||
|
|
||||||
"github.com/moby/buildkit/util/bklog"
|
|
||||||
"go.opentelemetry.io/contrib/instrumentation/net/http/httptrace/otelhttptrace"
|
"go.opentelemetry.io/contrib/instrumentation/net/http/httptrace/otelhttptrace"
|
||||||
"go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp"
|
"go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp"
|
||||||
"go.opentelemetry.io/otel/attribute"
|
"go.opentelemetry.io/otel/attribute"
|
||||||
|
@ -15,6 +14,11 @@ import (
|
||||||
semconv "go.opentelemetry.io/otel/semconv/v1.17.0"
|
semconv "go.opentelemetry.io/otel/semconv/v1.17.0"
|
||||||
"go.opentelemetry.io/otel/trace"
|
"go.opentelemetry.io/otel/trace"
|
||||||
"go.opentelemetry.io/otel/trace/noop"
|
"go.opentelemetry.io/otel/trace/noop"
|
||||||
|
|
||||||
|
"github.com/pkg/errors"
|
||||||
|
|
||||||
|
"github.com/moby/buildkit/util/bklog"
|
||||||
|
"github.com/moby/buildkit/util/stack"
|
||||||
)
|
)
|
||||||
|
|
||||||
// StartSpan starts a new span as a child of the span in context.
|
// StartSpan starts a new span as a child of the span in context.
|
||||||
|
@ -30,14 +34,30 @@ func StartSpan(ctx context.Context, operationName string, opts ...trace.SpanStar
|
||||||
return span, ctx
|
return span, ctx
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func hasStacktrace(err error) bool {
|
||||||
|
switch e := err.(type) {
|
||||||
|
case interface{ StackTrace() *stack.Stack }:
|
||||||
|
return true
|
||||||
|
case interface{ StackTrace() errors.StackTrace }:
|
||||||
|
return true
|
||||||
|
case interface{ Unwrap() error }:
|
||||||
|
return hasStacktrace(e.Unwrap())
|
||||||
|
case interface{ Unwrap() []error }:
|
||||||
|
for _, ue := range e.Unwrap() {
|
||||||
|
if hasStacktrace(ue) {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
// FinishWithError finalizes the span and sets the error if one is passed
|
// FinishWithError finalizes the span and sets the error if one is passed
|
||||||
func FinishWithError(span trace.Span, err error) {
|
func FinishWithError(span trace.Span, err error) {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
span.RecordError(err)
|
span.RecordError(err)
|
||||||
if _, ok := err.(interface {
|
if hasStacktrace(err) {
|
||||||
Cause() error
|
span.SetAttributes(attribute.String(string(semconv.ExceptionStacktraceKey), fmt.Sprintf("%+v", stack.Formatter(err))))
|
||||||
}); ok {
|
|
||||||
span.SetAttributes(attribute.String(string(semconv.ExceptionStacktraceKey), fmt.Sprintf("%+v", err)))
|
|
||||||
}
|
}
|
||||||
span.SetStatus(codes.Error, err.Error())
|
span.SetStatus(codes.Error, err.Error())
|
||||||
}
|
}
|
||||||
|
|
|
@ -153,7 +153,7 @@ github.com/compose-spec/compose-go/v2/validation
|
||||||
# github.com/containerd/console v1.0.4
|
# github.com/containerd/console v1.0.4
|
||||||
## explicit; go 1.13
|
## explicit; go 1.13
|
||||||
github.com/containerd/console
|
github.com/containerd/console
|
||||||
# github.com/containerd/containerd v1.7.17
|
# github.com/containerd/containerd v1.7.18
|
||||||
## explicit; go 1.21
|
## explicit; go 1.21
|
||||||
github.com/containerd/containerd/api/services/content/v1
|
github.com/containerd/containerd/api/services/content/v1
|
||||||
github.com/containerd/containerd/archive/compression
|
github.com/containerd/containerd/archive/compression
|
||||||
|
@ -168,7 +168,6 @@ github.com/containerd/containerd/images
|
||||||
github.com/containerd/containerd/images/archive
|
github.com/containerd/containerd/images/archive
|
||||||
github.com/containerd/containerd/labels
|
github.com/containerd/containerd/labels
|
||||||
github.com/containerd/containerd/leases
|
github.com/containerd/containerd/leases
|
||||||
github.com/containerd/containerd/log
|
|
||||||
github.com/containerd/containerd/namespaces
|
github.com/containerd/containerd/namespaces
|
||||||
github.com/containerd/containerd/pkg/dialer
|
github.com/containerd/containerd/pkg/dialer
|
||||||
github.com/containerd/containerd/pkg/randutil
|
github.com/containerd/containerd/pkg/randutil
|
||||||
|
@ -197,6 +196,9 @@ github.com/containerd/continuity/fs/fstest
|
||||||
github.com/containerd/continuity/pathdriver
|
github.com/containerd/continuity/pathdriver
|
||||||
github.com/containerd/continuity/proto
|
github.com/containerd/continuity/proto
|
||||||
github.com/containerd/continuity/sysx
|
github.com/containerd/continuity/sysx
|
||||||
|
# github.com/containerd/errdefs v0.1.0
|
||||||
|
## explicit; go 1.20
|
||||||
|
github.com/containerd/errdefs
|
||||||
# github.com/containerd/log v0.1.0
|
# github.com/containerd/log v0.1.0
|
||||||
## explicit; go 1.20
|
## explicit; go 1.20
|
||||||
github.com/containerd/log
|
github.com/containerd/log
|
||||||
|
@ -215,7 +217,7 @@ github.com/davecgh/go-spew/spew
|
||||||
# github.com/distribution/reference v0.5.0
|
# github.com/distribution/reference v0.5.0
|
||||||
## explicit; go 1.20
|
## explicit; go 1.20
|
||||||
github.com/distribution/reference
|
github.com/distribution/reference
|
||||||
# github.com/docker/cli v26.1.3+incompatible
|
# github.com/docker/cli v26.1.4+incompatible
|
||||||
## explicit
|
## explicit
|
||||||
github.com/docker/cli/cli
|
github.com/docker/cli/cli
|
||||||
github.com/docker/cli/cli-plugins/hooks
|
github.com/docker/cli/cli-plugins/hooks
|
||||||
|
@ -269,7 +271,7 @@ github.com/docker/distribution/registry/client/transport
|
||||||
github.com/docker/distribution/registry/storage/cache
|
github.com/docker/distribution/registry/storage/cache
|
||||||
github.com/docker/distribution/registry/storage/cache/memory
|
github.com/docker/distribution/registry/storage/cache/memory
|
||||||
github.com/docker/distribution/uuid
|
github.com/docker/distribution/uuid
|
||||||
# github.com/docker/docker v26.1.3+incompatible
|
# github.com/docker/docker v26.1.4+incompatible
|
||||||
## explicit
|
## explicit
|
||||||
github.com/docker/docker/api
|
github.com/docker/docker/api
|
||||||
github.com/docker/docker/api/types
|
github.com/docker/docker/api/types
|
||||||
|
@ -518,7 +520,7 @@ github.com/mitchellh/go-wordwrap
|
||||||
# github.com/mitchellh/reflectwalk v1.0.2
|
# github.com/mitchellh/reflectwalk v1.0.2
|
||||||
## explicit
|
## explicit
|
||||||
github.com/mitchellh/reflectwalk
|
github.com/mitchellh/reflectwalk
|
||||||
# github.com/moby/buildkit v0.14.0-rc1
|
# github.com/moby/buildkit v0.14.0-rc2
|
||||||
## explicit; go 1.21
|
## explicit; go 1.21
|
||||||
github.com/moby/buildkit/api/services/control
|
github.com/moby/buildkit/api/services/control
|
||||||
github.com/moby/buildkit/api/types
|
github.com/moby/buildkit/api/types
|
||||||
|
@ -863,7 +865,7 @@ golang.org/x/crypto/ssh/internal/bcrypt_pbkdf
|
||||||
golang.org/x/exp/constraints
|
golang.org/x/exp/constraints
|
||||||
golang.org/x/exp/maps
|
golang.org/x/exp/maps
|
||||||
golang.org/x/exp/slices
|
golang.org/x/exp/slices
|
||||||
# golang.org/x/mod v0.14.0
|
# golang.org/x/mod v0.17.0
|
||||||
## explicit; go 1.18
|
## explicit; go 1.18
|
||||||
golang.org/x/mod/internal/lazyregexp
|
golang.org/x/mod/internal/lazyregexp
|
||||||
golang.org/x/mod/module
|
golang.org/x/mod/module
|
||||||
|
|
Loading…
Reference in New Issue