diff --git a/Dockerfile b/Dockerfile index 55201bf18..c32aabfb4 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,7 +1,7 @@ # syntax=docker/dockerfile:1.3-labs FROM ghcr.io/acorn-io/images-mirror/tonistiigi/binfmt:qemu-v6.2.0 AS binfmt -FROM ghcr.io/acorn-io/images-mirror/moby/buildkit:v0.10.6 AS buildkit +FROM ghcr.io/acorn-io/images-mirror/moby/buildkit:v0.11.6 AS buildkit FROM ghcr.io/acorn-io/images-mirror/registry:2.8.1 AS registry FROM ghcr.io/acorn-io/images-mirror/rancher/klipper-lb:v0.3.5 AS klipper-lb diff --git a/docs/docs/100-reference/01-command-line/acorn_install.md b/docs/docs/100-reference/01-command-line/acorn_install.md index 2d42fb2c4..8571d0302 100644 --- a/docs/docs/100-reference/01-command-line/acorn_install.md +++ b/docs/docs/100-reference/01-command-line/acorn_install.md @@ -24,6 +24,7 @@ acorn install --allow-traffic-from-namespace strings Namespaces that are allowed to send network traffic to all Acorn apps --allow-user-annotation strings Allow these annotations to propagate to dependent objects, no effect if --ignore-user-labels-and-annotations not true --allow-user-label strings Allow these labels to propagate to dependent objects, no effect if --ignore-user-labels-and-annotations not true + --allow-user-metadata-namespace strings Allow these namespaces to propagate labels and annotations to dependent objects, no effect if --ignore-user-labels-and-annotations not true --api-server-replicas int acorn-api deployment replica count --auto-upgrade-interval string For apps configured with automatic upgrades enabled, the interval at which to check for new versions. Upgrade intervals configured at the application level cannot be smaller than this. (default '5m' - 5 minutes) --aws-identity-provider-arn string ARN of cluster's OpenID Connect provider registered in AWS diff --git a/go.mod b/go.mod index 564882207..afc8c9734 100644 --- a/go.mod +++ b/go.mod @@ -22,7 +22,8 @@ require ( github.com/aws/aws-sdk-go-v2/config v1.18.23 github.com/aws/aws-sdk-go-v2/service/iam v1.19.10 github.com/containerd/console v1.0.3 - github.com/containerd/containerd v1.6.10 + github.com/containerd/containerd v1.6.20 + github.com/denisbrodbeck/machineid v1.0.1 github.com/docker/cli v23.0.5+incompatible github.com/docker/docker-credential-helpers v0.7.0 github.com/go-acme/lego/v4 v4.9.1 @@ -35,7 +36,7 @@ require ( github.com/gorilla/websocket v1.5.0 github.com/liggitt/tabwriter v0.0.0-20181228230101-89fcab3d43de github.com/loft-sh/devspace v1.1.1-0.20221217093921-7604c5857f98 - github.com/moby/buildkit v0.10.6 + github.com/moby/buildkit v0.11.6 github.com/opencontainers/go-digest v1.0.0 github.com/opencontainers/image-spec v1.1.0-rc3 github.com/pkg/browser v0.0.0-20210911075715-681adbf594b8 @@ -48,7 +49,7 @@ require ( github.com/spf13/cobra v1.7.0 github.com/spf13/pflag v1.0.5 github.com/stretchr/testify v1.8.4 - github.com/tonistiigi/fsutil v0.0.0-20220315205639-9ed612626da3 + github.com/tonistiigi/fsutil v0.0.0-20230407161946-9e7a6df48576 github.com/wI2L/jsondiff v0.3.0 golang.org/x/crypto v0.9.0 golang.org/x/exp v0.0.0-20230515195305-f3d0a9c9a5cc @@ -102,7 +103,7 @@ require ( github.com/cespare/xxhash/v2 v2.2.0 // indirect github.com/cloudflare/circl v1.3.3 // indirect github.com/cockroachdb/apd/v2 v2.0.2 // indirect - github.com/containerd/continuity v0.3.0 // indirect + github.com/containerd/continuity v0.3.1-0.20230206214859-2a963a2f56e8 // indirect github.com/containerd/stargz-snapshotter/estargz v0.14.3 // indirect github.com/containerd/typeurl v1.0.2 // indirect github.com/coreos/go-semver v0.3.0 // indirect @@ -195,8 +196,9 @@ require ( github.com/mitchellh/go-wordwrap v1.0.1 // indirect github.com/mitchellh/mapstructure v1.5.0 // indirect github.com/moby/locker v1.0.1 // indirect + github.com/moby/patternmatcher v0.5.0 // indirect github.com/moby/spdystream v0.2.0 // indirect - github.com/moby/sys/signal v0.6.0 // indirect + github.com/moby/sys/signal v0.7.0 // indirect github.com/moby/term v0.5.0 // indirect github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect github.com/modern-go/reflect2 v1.0.2 // indirect diff --git a/go.sum b/go.sum index 555530429..ecb3759f4 100644 --- a/go.sum +++ b/go.sum @@ -2,7 +2,6 @@ atomicgo.dev/cursor v0.1.1 h1:0t9sxQomCTRh5ug+hAMCs59x/UmC9QL6Ci5uosINKD4= atomicgo.dev/cursor v0.1.1/go.mod h1:Lr4ZJB3U7DfPPOkbH7/6TOtJ4vFGHlgj1nc+n900IpU= atomicgo.dev/keyboard v0.2.8 h1:Di09BitwZgdTV1hPyX/b9Cqxi8HVuJQwWivnZUEqlj4= atomicgo.dev/keyboard v0.2.8/go.mod h1:BC4w9g00XkxH/f1HXhW2sXmJFOCWbKn9xrOunSFtExQ= -bazil.org/fuse v0.0.0-20160811212531-371fbbdaa898/go.mod h1:Xbm+BRKSBEpa4q4hTSxohYNQpsxXPbPry4JJWOB3LB8= cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= @@ -79,7 +78,7 @@ github.com/MarvinJWendt/testza v0.4.2/go.mod h1:mSdhXiKH8sg/gQehJ63bINcCKp7RtYew github.com/MarvinJWendt/testza v0.4.3 h1:u2XaM4IqGp9dsdUmML8/Z791fu4yjQYzOiufOtJwTII= github.com/Microsoft/go-winio v0.6.1 h1:9/kr64B9VUZrLm5YYwbGtUJnMgqWVOdUAXu6Migciow= github.com/Microsoft/go-winio v0.6.1/go.mod h1:LRdKpFKfdobln8UmuiYcKPot9D2v6svN5+sAH+4kjUM= -github.com/Microsoft/hcsshim v0.9.5 h1:AbV+VPfTrIVffukazHcpxmz/sRiE6YaMDzHWR9BXZHo= +github.com/Microsoft/hcsshim v0.9.8 h1:lf7xxK2+Ikbj9sVf2QZsouGjRjEp2STj1yDHgoVtU5k= github.com/NYTimes/gziphandler v1.1.1 h1:ZUDjpQae29j0ryrS0u/B8HZfJBtBQHjqw2rQ2cqUQ3I= github.com/NYTimes/gziphandler v1.1.1/go.mod h1:n/CVRwUEOgIxrgPvAQhUUr9oeUtvrhMomdKFjzJNB0c= github.com/Netflix/go-expect v0.0.0-20220104043353-73e0943537d2 h1:+vx7roKuyA63nhn5WAunQHLTznkw5W8b1Xc0dNjp83s= @@ -109,8 +108,6 @@ github.com/agnivade/levenshtein v1.1.1 h1:QY8M92nrzkmr798gCo3kmMyqXFzdQVpxLlGPRB github.com/agnivade/levenshtein v1.1.1/go.mod h1:veldBMzWxcCG2ZvUTKD2kJNRdCk5hVbJomOvKkmgYbo= github.com/alcortesm/tgz v0.0.0-20161220082320-9c5fe88206d7 h1:uSoVVbwJiQipAclBbw+8quDsfcvFjOpI5iCf4p/cqCs= github.com/alcortesm/tgz v0.0.0-20161220082320-9c5fe88206d7/go.mod h1:6zEj6s6u/ghQa61ZWa/C2Aw3RkjiTBOix7dkqa1VLIs= -github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= -github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239/go.mod h1:2FmKhYUyUczH0OGQWaF5ceTx0UBShxjsH6f8oGKYe2c= github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be h1:9AeTilPcZAjCFIImctFaOjnTIavg87rW78vTPkQqLI8= github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= @@ -118,7 +115,6 @@ github.com/antlr/antlr4/runtime/Go/antlr v1.4.10 h1:yL7+Jz0jTC6yykIK/Wh74gnTJnrG github.com/antlr/antlr4/runtime/Go/antlr v1.4.10/go.mod h1:F7bn7fEU90QkQ3tnmaTx3LTKLEDqnwWODIYppRQ5hnY= github.com/arbovm/levenshtein v0.0.0-20160628152529-48b4e1c0c4d0 h1:jfIu9sQUG6Ig+0+Ap1h4unLjW6YQJpKZVmUzxsD4E/Q= github.com/arbovm/levenshtein v0.0.0-20160628152529-48b4e1c0c4d0/go.mod h1:t2tdKJDJF9BV14lnkjHmOQgcvEKgtqs5a1N3LNdJhGE= -github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8= github.com/armon/go-proxyproto v0.0.0-20210323213023-7e956b284f0a/go.mod h1:QmP9hvJ91BbJmGVGSbutW19IC0Q9phDCLGaomwTJbgU= github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5 h1:0CwZNZbxp69SHPdPJAN/hZIm0C4OItdklCFmMRWYpio= github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs= @@ -159,8 +155,6 @@ github.com/aws/smithy-go v1.13.5 h1:hgz0X/DX0dGqTYpGALqXJoRKRj5oQ7150i5FdTePzO8= github.com/aws/smithy-go v1.13.5/go.mod h1:Tg+OJXh4MB2R/uN61Ko2f6hTZwB/ZYGOtib8J3gBHzA= github.com/benbjohnson/clock v1.1.0 h1:Q92kusRqC1XV2MjkWETPvjJVqKetz1OzxZB7mHJLju8= github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= -github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= -github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= github.com/blang/semver v3.5.1+incompatible h1:cQNTCjp13qL8KC3Nbxr/y2Bqb63oX6wdnnjpJbkM4JQ= @@ -199,30 +193,24 @@ github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWH github.com/cockroachdb/apd/v2 v2.0.2 h1:weh8u7Cneje73dDh+2tEVLUvyBc89iwepWCD8b8034E= github.com/cockroachdb/apd/v2 v2.0.2/go.mod h1:DDxRlzC2lo3/vSlmSoS7JkqbbrARPuFOGr0B9pvN3Gw= github.com/codahale/rfc6979 v0.0.0-20141003034818-6a90f24967eb h1:EDmT6Q9Zs+SbUoc7Ik9EfrFqcylYqgPZ9ANSbTAntnE= -github.com/containerd/cgroups v1.0.3 h1:ADZftAkglvCiD44c77s5YmMqaP2pzVCFZvBmAlBdAP4= +github.com/containerd/cgroups v1.0.4 h1:jN/mbWBEaz+T1pi5OFtnkQ+8qnmEbAr1Oo1FRm5B0dA= github.com/containerd/console v1.0.3 h1:lIr7SlA5PxZyMV30bDW0MGbiOPXwc63yRuCP0ARubLw= github.com/containerd/console v1.0.3/go.mod h1:7LqA/THxQ86k76b8c/EMSiaJ3h1eZkMkXar0TQ1gf3U= -github.com/containerd/containerd v1.6.10 h1:8aiav7I2ZyQLbTlNMcBXyAU1FtFvp6VuyuW13qSd6Hk= -github.com/containerd/containerd v1.6.10/go.mod h1:CVqfxdJ95PDgORwA219AwwLrREZgrTFybXu2HfMKRG0= -github.com/containerd/continuity v0.1.0/go.mod h1:ICJu0PwR54nI0yPEnJ6jcS+J7CZAUXrLh8lPo2knzsM= -github.com/containerd/continuity v0.3.0 h1:nisirsYROK15TAMVukJOUyGJjz4BNQJBVsNvAXZJ/eg= -github.com/containerd/continuity v0.3.0/go.mod h1:wJEAIwKOm/pBZuBd0JmeTvnLquTB1Ag8espWhkykbPM= +github.com/containerd/containerd v1.6.20 h1:+itjwpdqXpzHB/QAiWc/BZCjjVfcNgw69w/oIeF4Oy0= +github.com/containerd/containerd v1.6.20/go.mod h1:apei1/i5Ux2FzrK6+DM/suEsGuK/MeVOfy8tR2q7Wnw= +github.com/containerd/continuity v0.3.1-0.20230206214859-2a963a2f56e8 h1:EdSQb65ohzz4jsyPOhxfu3/+c9nnU0euk0otferwl9A= +github.com/containerd/continuity v0.3.1-0.20230206214859-2a963a2f56e8/go.mod h1:wJEAIwKOm/pBZuBd0JmeTvnLquTB1Ag8espWhkykbPM= github.com/containerd/fifo v1.0.0 h1:6PirWBr9/L7GDamKr+XM0IeUFXu5mf3M/BPpH9gaLBU= +github.com/containerd/nydus-snapshotter v0.3.1 h1:b8WahTrPkt3XsabjG2o/leN4fw3HWZYr+qxo/Z8Mfzk= github.com/containerd/stargz-snapshotter/estargz v0.14.3 h1:OqlDCK3ZVUO6C3B/5FSkDwbkEETK84kQgEeFwDC+62k= github.com/containerd/stargz-snapshotter/estargz v0.14.3/go.mod h1:KY//uOCIkSuNAHhJogcZtrNHdKrA99/FCCRjE3HD36o= -github.com/containerd/ttrpc v1.1.0 h1:GbtyLRxb0gOLR0TYQWt3O6B0NvT8tMdorEHqIQo/lWI= +github.com/containerd/ttrpc v1.1.1 h1:NoRHS/z8UiHhpY1w0xcOqoJDGf2DHyzXrF0H4l5AE8c= github.com/containerd/typeurl v1.0.2 h1:Chlt8zIieDbzQFzXzAeBEF92KhExuE4p9p92/QmY7aY= github.com/containerd/typeurl v1.0.2/go.mod h1:9trJWW2sRlGub4wZJRTW83VtbOLS6hwcDZXTn6oPz9s= -github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk= -github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= -github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= github.com/coreos/go-semver v0.3.0 h1:wkHLiw0WNATZnSG7epLsujiMCgPAc9xhjJ4tgnAxmfM= github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= -github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= github.com/coreos/go-systemd/v22 v22.5.0 h1:RrqgGjYQKalulkV8NGVIfkXQf6YYmOyiJKk8iXXhfZs= github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= -github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= -github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= github.com/cpuguy83/go-md2man/v2 v2.0.2 h1:p1EgwI/C7NhT0JmVkwCD2ZBK8j4aeHQX2pMHHBfMQ6w= github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= @@ -235,8 +223,8 @@ github.com/cyphar/filepath-securejoin v0.2.3 h1:YX6ebbZCZP7VkM3scTTokDgBL2TY741X github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= -github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= +github.com/denisbrodbeck/machineid v1.0.1 h1:geKr9qtkB876mXguW2X6TU4ZynleN6ezuMSRhl4D7AQ= +github.com/denisbrodbeck/machineid v1.0.1/go.mod h1:dJUwb7PTidGDeYyUBmXZ2GphQBbjJCrnectwCyxcUSI= github.com/dgryski/trifles v0.0.0-20200323201526-dd97f9abfb48 h1:fRzb/w+pyskVMQ+UbP35JkH8yB7MYb4q/qhBarqZE6g= github.com/dgryski/trifles v0.0.0-20200323201526-dd97f9abfb48/go.mod h1:if7Fbed8SFyPtHLHbg49SI7NAdJiC5WIA09pe59rfAA= github.com/digitorus/pkcs7 v0.0.0-20221019075359-21b8b40e6bb4/go.mod h1:SKVExuS+vpu2l9IoOc0RwqE7NYnb0JlcFHFnEJkVDzc= @@ -310,10 +298,7 @@ github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9 github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= github.com/go-jose/go-jose/v3 v3.0.0 h1:s6rrhirfEP/CGIoc6p+PZAeogN2SxKav6Wp7+dyMWVo= -github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY= -github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= -github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A= github.com/go-logr/logr v0.1.0/go.mod h1:ixOQHD9gLJUVQQ2ZOR7zLEifBX6tGkNJF4QyIY7sIas= github.com/go-logr/logr v0.2.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU= @@ -402,8 +387,6 @@ github.com/gofrs/flock v0.8.1 h1:+gYjHKf32LDeiEEFhQaotPbLuUXjY5ZqxKgXy7n59aw= github.com/gofrs/flock v0.8.1/go.mod h1:F1TvTiK9OcQqauNUHlbJvyl9Qa1QvF/gOUDKA14jxHU= github.com/gogo/googleapis v1.4.1 h1:1Yx4Myt7BxzvUr5ldGSbwYiZG6t9wGBZ+8/fX3Wvtq0= github.com/gogo/googleapis v1.4.1/go.mod h1:2lpHqI5OcWCtVElxXnPt+s8oJvMpySlOyM6xDCrzib4= -github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= -github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4= github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= github.com/golang-jwt/jwt/v4 v4.5.0 h1:7cYmW1XlMY7h7ii7UhUyChSgS5wUJEnm9uZVTGqOWzg= @@ -411,7 +394,6 @@ github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfU github.com/golang/glog v1.0.0/go.mod h1:EWib/APOK0SL3dFbYqvxE3UYd8E6s1ouQ7iEp/0LWV4= github.com/golang/glog v1.1.0 h1:/d3pCKDPWNnvIWe0vVUpNP32qc8U3PDVxySP/y360qE= github.com/golang/glog v1.1.0/go.mod h1:pfYeQZ3JWZoXTV5sFc986z3HTpwQs9At6P4ImfuP3NQ= -github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= @@ -518,16 +500,13 @@ github.com/gookit/color v1.4.2/go.mod h1:fqRyamkC1W8uxl+lxCQxOT09l/vYfZ+QeiX3rKQ github.com/gookit/color v1.5.0/go.mod h1:43aQb+Zerm/BWh2GnrgOQm7ffz7tvQXEKV6BFMl7wAo= github.com/gookit/color v1.5.2 h1:uLnfXcaFjlrDnQDT+NCBcfhrXqYTx/rcCa6xn01Y8yI= github.com/gookit/color v1.5.2/go.mod h1:w8h4bGiHeeBpvQVePTutdbERIUf3oJE5lZ8HM0UgXyg= -github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= github.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWmnc= github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= -github.com/grpc-ecosystem/go-grpc-middleware v1.0.0/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= github.com/grpc-ecosystem/go-grpc-middleware v1.4.0 h1:UH//fgunKIs4JdUbpDl1VZCDaL56wXCB/5+wF6uHfaI= github.com/grpc-ecosystem/go-grpc-middleware v1.4.0/go.mod h1:g5qyo/la0ALbONm6Vbp88Yd8NsDy6rZz+RcrMPxvld8= github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0 h1:Ovs26xHkKqVztRpIrF/92BcuyuQ/YW4NSIpoGtfXNho= github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= -github.com/grpc-ecosystem/grpc-gateway v1.9.0/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= github.com/grpc-ecosystem/grpc-gateway v1.16.0 h1:gmcG1KaJ57LophUzW0Hy8NmPhnMZb4M0+kPpLofRdBo= github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= github.com/grpc-ecosystem/grpc-gateway/v2 v2.7.0/go.mod h1:hgWBS7lorOAVIJEQMi4ZsPv9hVvWI6+ch50m39Pf2Ks= @@ -584,7 +563,6 @@ github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHW github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U= github.com/jmhodges/clock v0.0.0-20160418191101-880ee4c33548 h1:dYTbLf4m0a5u0KLmPfB6mgxbcV7588bOCx79hxa5Sr4= github.com/joho/godotenv v1.3.0/go.mod h1:7hK45KPybAkOC6peb+G5yklZfMxEjkZhHbwpqxOKXbg= -github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= github.com/jonboulle/clockwork v0.3.0 h1:9BSCMi8C+0qdApAp4auwX0RkLGUjs956h0EkuQymUhg= github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY= github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y= @@ -592,7 +570,6 @@ github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnr github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= -github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= github.com/k0kubun/go-ansi v0.0.0-20180517002512-3bf9e2903213 h1:qGQQKEcAR99REcMpsXCp3lJ03zYT1PkRd3kQGPn9GVg= github.com/k0kubun/go-ansi v0.0.0-20180517002512-3bf9e2903213/go.mod h1:vNUNkEQ1e29fT/6vq2aBdFsgNPmy8qMdSay1npru+Sw= github.com/karrick/godirwalk v1.8.0/go.mod h1:H5KPZjojv4lE+QYImBI8xVtrBRgYrIVsaRPx4tDPEn4= @@ -601,7 +578,6 @@ github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 h1:Z9n2FFNU github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51/go.mod h1:CzGEWj7cYgsdH8dAjBGEr58BoE7ScuLd+fwFZ44+/x8= github.com/kevinburke/ssh_config v0.0.0-20190725054713-01f96b0aa0cd h1:Coekwdh0v2wtGp9Gmz1Ze3eVRAWJMLokvN3QjdzCHLY= github.com/kevinburke/ssh_config v0.0.0-20190725054713-01f96b0aa0cd/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM= -github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q= github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/klauspost/compress v1.13.6/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= @@ -614,7 +590,6 @@ github.com/klauspost/cpuid/v2 v2.1.0 h1:eyi1Ad2aNJMW95zcSbmGg7Cg6cq3ADwLpMAP96d8 github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/konsorten/go-windows-terminal-sequences v1.0.2/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg= -github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= @@ -642,7 +617,6 @@ github.com/loft-sh/loft-util v0.0.9-alpha h1:kGcyTQWxWHWy7bbjhS8Hsq/JRdlSztAU++a github.com/loft-sh/loft-util v0.0.9-alpha/go.mod h1:lsjG5Exh5iEf7Z/87nqwkxx3GRQTizFRLGuS1knF6Cg= github.com/loft-sh/notify v0.0.0-20210827094439-0720dcc7feee h1:hZ79+pKEbCBrH1dVmgZ4jtFrrDPxgM4zqEP1lHlSnvI= github.com/loft-sh/notify v0.0.0-20210827094439-0720dcc7feee/go.mod h1:pq83B8lgfCY7tKdegTTXU6DZxGQkcWMowUTOTpTQmqk= -github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= github.com/magiconair/properties v1.8.7 h1:IeQXZAiQcpL9mgcAe1Nu6cX9LLw6ExEHKjN0VQdvPDY= github.com/magiconair/properties v1.8.7/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0= github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= @@ -665,7 +639,6 @@ github.com/mattn/go-isatty v0.0.17/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/ github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= github.com/mattn/go-runewidth v0.0.13 h1:lTGmDsbAYt5DmK6OnoV7EuIF1wEIFAcxld6ypU4OSgU= github.com/mattn/go-runewidth v0.0.13/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= -github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= github.com/matttproud/golang_protobuf_extensions v1.0.4 h1:mmDVorXM7PCGKw94cs5zkfA9PSy5pEvNWRP0ET0TIVo= github.com/matttproud/golang_protobuf_extensions v1.0.4/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4= github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b h1:j7+1HpAFS1zy5+Q4qx1fWh90gTKwiN4QCGoY9TWyyO4= @@ -679,20 +652,21 @@ github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= github.com/mitchellh/go-wordwrap v1.0.1 h1:TLuKupo69TCn6TQSyGxwI1EblZZEsQ0vMlAFQflz0v0= github.com/mitchellh/go-wordwrap v1.0.1/go.mod h1:R62XHJLzvMFRBbcrT7m7WgmE1eOyTSsCt+hzestvNj0= -github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= github.com/mitchellh/mapstructure v1.3.3/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= github.com/mitchellh/mapstructure v1.4.1/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY= github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= -github.com/moby/buildkit v0.10.6 h1:DJlEuLIgnu34HQKF4n9Eg6q2YqQVC0eOpMb4p2eRS2w= -github.com/moby/buildkit v0.10.6/go.mod h1:tQuuyTWtOb9D+RE425cwOCUkX0/oZ+5iBZ+uWpWQ9bU= +github.com/moby/buildkit v0.11.6 h1:VYNdoKk5TVxN7k4RvZgdeM4GOyRvIi4Z8MXOY7xvyUs= +github.com/moby/buildkit v0.11.6/go.mod h1:GCqKfHhz+pddzfgaR7WmHVEE3nKKZMMDPpK8mh3ZLv4= github.com/moby/locker v1.0.1 h1:fOXqR41zeveg4fFODix+1Ch4mj/gT0NE1XJbp/epuBg= github.com/moby/locker v1.0.1/go.mod h1:S7SDdo5zpBK84bzzVlKr2V0hz+7x9hWbYC/kq7oQppc= +github.com/moby/patternmatcher v0.5.0 h1:YCZgJOeULcxLw1Q+sVR636pmS7sPEn1Qo2iAN6M7DBo= +github.com/moby/patternmatcher v0.5.0/go.mod h1:hDPoyOpDY7OrrMDLaYoY3hf52gNCR/YOUYxkhApJIxc= github.com/moby/spdystream v0.2.0 h1:cjW1zVyyoiM0T7b6UoySUFqzXMoqRckQtXwGPiBhOM8= github.com/moby/spdystream v0.2.0/go.mod h1:f7i0iNDQJ059oMTcWxx8MA/zKFIuD/lY+0GqbN2Wy8c= -github.com/moby/sys/mountinfo v0.6.0 h1:gUDhXQx58YNrpHlK4nSL+7y2pxFZkUcXqzFDKWdC0Oo= -github.com/moby/sys/signal v0.6.0 h1:aDpY94H8VlhTGa9sNYUFCFsMZIUh5wm0B6XkIoJj/iY= -github.com/moby/sys/signal v0.6.0/go.mod h1:GQ6ObYZfqacOwTtlXvcmh9A26dVRul/hbOZn88Kg8Tg= +github.com/moby/sys/mountinfo v0.6.2 h1:BzJjoreD5BMFNmD9Rus6gdd1pLuecOFPt8wC+Vygl78= +github.com/moby/sys/signal v0.7.0 h1:25RW3d5TnQEoKvRbEKUGay6DCQ46IxAVTT9CUMgmsSI= +github.com/moby/sys/signal v0.7.0/go.mod h1:GQ6ObYZfqacOwTtlXvcmh9A26dVRul/hbOZn88Kg8Tg= github.com/moby/term v0.5.0 h1:xt8Q1nalod/v7BqbG21f8mQPqH+xAaC9C3N3wfWbVP0= github.com/moby/term v0.5.0/go.mod h1:8FzsFHVUBGZdbDsJw/ot+X+d5HLUbvklYLJ9uGfcI3Y= github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= @@ -707,7 +681,6 @@ github.com/mpvl/unique v0.0.0-20150818121801-cbe035fff7de h1:D5x39vF5KCwKQaw+OC9 github.com/mpvl/unique v0.0.0-20150818121801-cbe035fff7de/go.mod h1:kJun4WP5gFuHZgRjZUWWuH1DTxCtxbHDOIJsudS8jzY= github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA= github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= -github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= github.com/nightlyone/lockfile v1.0.0 h1:RHep2cFKK4PonZJDdEl4GmkabuhbsRMgk/k3uAmxBiA= github.com/nightlyone/lockfile v1.0.0/go.mod h1:rywoIealpdNse2r832aiD9jRk8ErCatROs6LzC841CI= @@ -734,9 +707,9 @@ github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8 github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM= github.com/opencontainers/image-spec v1.1.0-rc3 h1:fzg1mXZFj8YdPeNkRXMg+zb88BFV0Ys52cJydRwBkb8= github.com/opencontainers/image-spec v1.1.0-rc3/go.mod h1:X4pATf0uXsnn3g5aiGIsVnJBR4mxhKzfwmvK/B2NTm8= -github.com/opencontainers/runc v1.1.2 h1:2VSZwLx5k/BfsBxMMipG/LYUnmqOD/BPkIVgQUcTlLw= +github.com/opencontainers/runc v1.1.5 h1:L44KXEpKmfWDcS02aeGm8QNTFXTo2D+8MYGDIJ/GDEs= github.com/opencontainers/runtime-spec v1.0.3-0.20210326190908-1c3f411f0417 h1:3snG66yBm59tKhhSPQrQ/0bCrv1LQbKt40LnUPiUxdc= -github.com/opencontainers/selinux v1.10.1 h1:09LIPVRP3uuZGQvgR+SgMSNBd1Eb3vlRbGqQpoHsF8w= +github.com/opencontainers/selinux v1.10.2 h1:NFy2xCsjn7+WspbfZkUd5zyVeisV7VFbPSP96+8/ha4= github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= github.com/opentracing/opentracing-go v1.2.0 h1:uEJPy/1a5RIPAJ0Ov+OIO8OxWu77jEv+1B0VhjKrZUs= github.com/opentracing/opentracing-go v1.2.0/go.mod h1:GxEUsuufX4nBwe+T+Wl9TAgYrxe9dPLANfrWvHYVTgc= @@ -747,9 +720,10 @@ github.com/otiai10/curr v1.0.0/go.mod h1:LskTG5wDwr8Rs+nNQ+1LlxRjAtTZZjtJW4rMXl6 github.com/otiai10/mint v1.3.0/go.mod h1:F5AjcsTsWUqX+Na9fpHb52P8pcRX2CI6A3ctIT91xUo= github.com/otiai10/mint v1.3.3 h1:7JgpsBaN0uMkyju4tbYHu0mnM55hNKVYLsXmwr15NQI= github.com/otiai10/mint v1.3.3/go.mod h1:/yxELlJQ0ufhjUwhshSj+wFjZ78CnZ48/1wtmBH1OTc= +github.com/package-url/packageurl-go v0.1.1-0.20220428063043-89078438f170 h1:DiLBVp4DAcZlBVBEtJpNWZpZVq0AEeCY7Hqk8URVs4o= github.com/pelletier/go-buffruneio v0.2.0/go.mod h1:JkE26KsDizTr40EUHkXVtNPvgGtbSNq5BcowyYOWdKo= -github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= github.com/pelletier/go-toml v1.7.0/go.mod h1:vwGMzjaWMwyfHwgIBhI2YUM4fB6nL6lVAvS1LBMMhTE= +github.com/pelletier/go-toml v1.9.5 h1:4yBQzkHv+7BHq2PQUZF3Mx0IYxG7LsP222s7Agd3ve8= github.com/pelletier/go-toml/v2 v2.0.8 h1:0ctb6s9mE31h0/lhu+J6OPmVeDxJn+kYnJc2jZR9tGQ= github.com/pelletier/go-toml/v2 v2.0.8/go.mod h1:vuYfssBdrU2XDZ9bYydBu6t+6a6PYNcZljzZR9VXg+4= github.com/pkg/browser v0.0.0-20210911075715-681adbf594b8 h1:KoWmjvw+nsYOo29YJK9vDA65RGE3NrOnUtO7a+RF9HU= @@ -762,24 +736,15 @@ github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINE github.com/pkg/sftp v1.13.1/go.mod h1:3HaPG6Dq1ILlpPZRO0HVMrsydcdLt6HRDccSgb87qRg= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= -github.com/prometheus/client_golang v0.9.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDft0ttaMvbicHlPoso= github.com/prometheus/client_golang v1.15.1 h1:8tXpTmJbyH5lydzFPoxSIJ0J46jdh3tylbvM1xCv0LI= github.com/prometheus/client_golang v1.15.1/go.mod h1:e9yaBhRPU2pPNsZwE+JdQl0KEt1N9XgF6zxWmaC0xOk= -github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= -github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.4.0 h1:5lQXD3cAg1OXBf4Wq03gTrXHeaV0TQvGfUooCfx1yqY= github.com/prometheus/client_model v0.4.0/go.mod h1:oMQmHW1/JoDwqLtg57MGgP/Fb1CJEYF2imWWhWtMkYU= -github.com/prometheus/common v0.0.0-20181113130724-41aa239b4cce/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= -github.com/prometheus/common v0.4.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= github.com/prometheus/common v0.42.0 h1:EKsfXEYo4JpWMHH5cg+KOUWeuJSov1Id8zGR8eeI1YM= github.com/prometheus/common v0.42.0/go.mod h1:xBwqVerjNdUDjgODMpudtOMwlOwf2SaTr1yjz4b7Zbc= -github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= -github.com/prometheus/procfs v0.0.0-20190507164030-5867b95ac084/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= github.com/prometheus/procfs v0.9.0 h1:wzCHvIvM5SxWqYvwgVL7yJY8Lz3PKn49KQtpgMYJfhI= github.com/prometheus/procfs v0.9.0/go.mod h1:+pB4zwohETzFnmlpe6yd2lSc+0/46IYZRB/chUwxUZY= -github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= github.com/protocolbuffers/txtpbfmt v0.0.0-20220428173112-74888fd59c2b h1:zd/2RNzIRkoGGMjE+YIsZ85CnDIz672JK2F3Zl4vux4= github.com/protocolbuffers/txtpbfmt v0.0.0-20220428173112-74888fd59c2b/go.mod h1:KjY0wibdYKc4DYkerHSbguaf3JeIPGhNJBp2BNiFH78= github.com/pterm/pterm v0.12.27/go.mod h1:PhQ89w4i95rhgE+xedAoqous6K9X+r6aSOI2eFF7DZI= @@ -795,7 +760,6 @@ github.com/rancher/lasso v0.0.0-20221227210133-6ea88ca2fbcc h1:29VHrInLV4qSevvcv github.com/rancher/lasso v0.0.0-20221227210133-6ea88ca2fbcc/go.mod h1:dEfC9eFQigj95lv/JQ8K5e7+qQCacWs1aIA6nLxKzT8= github.com/rivo/uniseg v0.2.0 h1:S1pD9weZBuJdFmowNwbpi7BJ8TNftyUImj/0WQi72jY= github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= -github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= github.com/rogpeppe/go-internal v1.1.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/rogpeppe/go-internal v1.2.2/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= @@ -803,7 +767,6 @@ github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFR github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs= github.com/rogpeppe/go-internal v1.10.0 h1:TMyTOH3F/DB16zRVcYyreMH6GnZZrwQVAoYjRBZyWFQ= -github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/ryanuber/go-glob v1.0.0 h1:iQh3xXAumdQ+4Ufa5b25cRpC5TYKlno6hsv6Cb3pkBk= @@ -819,7 +782,6 @@ github.com/sergi/go-diff v1.3.1 h1:xkr+Oxo4BOQKmkn/B9eMK0g5Kg/983T9DqqPHwYqD+8= github.com/sergi/go-diff v1.3.1/go.mod h1:aMJSSKb2lpPvRNec0+w3fl7LP9IOFzdc9Pa4NFbPK1I= github.com/shibumi/go-pathspec v1.3.0 h1:QUyMZhFo0Md5B8zV8x2tesohbb5kfbpTi9rBnKh5dkI= github.com/shibumi/go-pathspec v1.3.0/go.mod h1:Xutfslp817l2I1cZvgcfeMQJG5QnU2lh5tVaaMCl3jE= -github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= github.com/sigstore/cosign/v2 v2.0.2 h1:Ttaj/OkJAy+ummhnHG2F+JSFeZQj8i0P6o8j2RY9NG4= github.com/sigstore/cosign/v2 v2.0.2/go.mod h1:yJXtRmWrumyQA/XPjTTjOufnNckI87mmmVxv9rtEqgE= github.com/sigstore/rekor v1.2.1 h1:cEI4qn9IBvM7EkPQYl3YzCwCw97Mx8O2nHrv02XiI8U= @@ -828,34 +790,27 @@ github.com/sigstore/sigstore v1.6.4 h1:jH4AzR7qlEH/EWzm+opSpxCfuUcjHL+LJPuQE7h40 github.com/sigstore/sigstore v1.6.4/go.mod h1:pjR64lBxnjoSrAr+Ydye/FV73IfrgtoYlAI11a8xMfA= github.com/sigstore/timestamp-authority v1.1.1 h1:EldrdeBED0edNzDMvYZDf5CyWgtSchtR9DKYyksNR8M= github.com/sigstore/timestamp-authority v1.1.1/go.mod h1:cEDLEHl/L3ppqKDaiZ3Cg4ikcaYleuq90I/BFNePzF0= -github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= github.com/sirupsen/logrus v1.4.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= -github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= github.com/sirupsen/logrus v1.9.0/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= github.com/sirupsen/logrus v1.9.2 h1:oxx1eChJGI6Uks2ZC4W1zpLlVgqB8ner4EuQwV4Ik1Y= github.com/sirupsen/logrus v1.9.2/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= -github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= github.com/soheilhy/cmux v0.1.5 h1:jjzc5WVemNEDTLwv9tlmemhC73tI08BNOIGwBOo10Js= github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= -github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= +github.com/spdx/tools-golang v0.3.1-0.20230104082527-d6f58551be3f h1:9B623Cfs+mclYK6dsae7gLSwuIBHvlgmEup87qpqsAQ= github.com/spf13/afero v1.9.5 h1:stMpOSZFs//0Lv29HduCmli3GUfpFoF3Y1Q/aXj/wVM= github.com/spf13/afero v1.9.5/go.mod h1:UBogFpq8E9Hx+xc5CNTTEpTnuHVmXDwZcZcE1eb/UhQ= -github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= github.com/spf13/cast v1.5.1 h1:R+kOtfhWQE6TVQzY+4D7wJLBgkdVasCEFxSUBYBYIlA= github.com/spf13/cast v1.5.1/go.mod h1:b9PdjNptOpzXr7Rq1q9gJML/2cdGQAo69NKzQ10KN48= github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= -github.com/spf13/cobra v1.0.0/go.mod h1:/6GTrnGXV9HjY+aR4k0oJ5tcvakLuG6EuKReYlHNrgE= github.com/spf13/cobra v1.7.0 h1:hyqWnYt1ZQShIddO5kBpj3vu05/++x6tJ6dg8EC572I= github.com/spf13/cobra v1.7.0/go.mod h1:uLxZILRyS/50WlhOIKD7W6V5bgeIt+4sICxh6uRMrb0= -github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= github.com/spf13/jwalterweatherman v1.1.0 h1:ue6voC5bR5F8YxI5S67j9i582FU4Qvo2bmqnqMYADFk= github.com/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0EXowPYD95IqWIGo= github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= -github.com/spf13/viper v1.4.0/go.mod h1:PTJ7Z/lr49W6bUbkmS1V3by4uWynFiR9p7+dSq/yZzE= github.com/spf13/viper v1.16.0 h1:rGGH0XDZhdUOryiDWjmIvUSWpbNqisK8Wk0Vyefw8hc= github.com/spf13/viper v1.16.0/go.mod h1:yg78JgCJcbrQOvV9YLXgkLaZqUidkY9K+Dd1FofRzQg= github.com/src-d/gcfg v1.4.0 h1:xXbNR5AlLSA315x2UO+fTSSAXCDf+Ar38/6oyGbDKQ4= @@ -900,17 +855,15 @@ github.com/tidwall/pretty v1.2.1 h1:qjsOFOWWQl+N3RsoF5/ssm1pHmJJwhjlSbZ51I6wMl4= github.com/tidwall/pretty v1.2.1/go.mod h1:ITEVvHYasfjBbM0u2Pg8T2nJnzm8xPwvNhhsoaGGjNU= github.com/titanous/rocacheck v0.0.0-20171023193734-afe73141d399 h1:e/5i7d4oYZ+C1wj2THlRK+oAhjeS/TRQwMfkIuet3w0= github.com/titanous/rocacheck v0.0.0-20171023193734-afe73141d399/go.mod h1:LdwHTNJT99C5fTAzDz0ud328OgXz+gierycbcIx2fRs= -github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= github.com/tmc/grpc-websocket-proxy v0.0.0-20220101234140-673ab2c3ae75 h1:6fotK7otjonDflCTK0BCfls4SPy3NcCVb5dqqmbRknE= -github.com/tonistiigi/fsutil v0.0.0-20220315205639-9ed612626da3 h1:T1pEe+WB3SCPVAfVquvfPfagKZU2Z8c1OP3SuGB+id0= -github.com/tonistiigi/fsutil v0.0.0-20220315205639-9ed612626da3/go.mod h1:oPAfvw32vlUJSjyDcQ3Bu0nb2ON2B+G0dtVN/SZNJiA= +github.com/tonistiigi/fsutil v0.0.0-20230407161946-9e7a6df48576 h1:fZXPQDVh5fm2x7pA0CH1TtH80tiZ0L7i834kZqZN8Pw= +github.com/tonistiigi/fsutil v0.0.0-20230407161946-9e7a6df48576/go.mod h1:q1CxMSzcAbjUkVGHoZeQUcCaALnaE4XdWk+zJcgMYFw= github.com/tonistiigi/units v0.0.0-20180711220420-6950e57a87ea h1:SXhTLE6pb6eld/v/cCndK0AMpt1wiVFb/YYmqB3/QG0= github.com/tonistiigi/units v0.0.0-20180711220420-6950e57a87ea/go.mod h1:WPnis/6cRcDZSUvVmezrxJPkiO87ThFYsoUiMwWNDJk= github.com/tonistiigi/vt100 v0.0.0-20210615222946-8066bb97264f h1:DLpt6B5oaaS8jyXHa9VA4rrZloBVPVXeCtrOsrFauxc= github.com/tonistiigi/vt100 v0.0.0-20210615222946-8066bb97264f/go.mod h1:ulncasL3N9uLrVann0m+CDlJKWsIAP34MPcOJF6VRvc= github.com/transparency-dev/merkle v0.0.2 h1:Q9nBoQcZcgPamMkGn7ghV8XiTZ/kRxn1yCG81+twTK4= github.com/transparency-dev/merkle v0.0.2/go.mod h1:pqSy+OXefQ1EDUVmAJ8MUhHB9TXGuzVAT58PqBoHz1A= -github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGrc= github.com/urfave/cli v1.22.12/go.mod h1:sSBEIC79qR6OvcmsD4U3KABeOTxDqQtdDnaFuUN30b8= github.com/vbatts/tar-split v0.11.3 h1:hLFqsOLQ1SsppQNTMpkpPXClLDfC2A3Zgy9OUU+RVck= github.com/vbatts/tar-split v0.11.3/go.mod h1:9QlHN18E+fEH7RdG+QAJJcuya3rqT7eXSTY7wGrAokY= @@ -931,10 +884,8 @@ github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f/go.mod h1:N2 github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415/go.mod h1:GwrjFmJcFw6At/Gs6z4yjiIwzuJ1/+UwLxMQDVQXShQ= github.com/xeipuuv/gojsonschema v1.2.0/go.mod h1:anYRn/JVcOK2ZgGU+IjEV4nwlhoK5sQluxsYJ78Id3Y= github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2 h1:eY9dn8+vbi4tKz5Qo6v2eYzo7kUS51QINcR5jNpbZS8= -github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= github.com/xo/terminfo v0.0.0-20210125001918-ca9a967f8778 h1:QldyIu/L63oPpyvQmHgvgickp1Yw510KJOqX7H24mg8= github.com/xo/terminfo v0.0.0-20210125001918-ca9a967f8778/go.mod h1:2MuV+tbUrU1zIOPMxZ5EncGwgmMJsa+9ucAQZXxsObs= -github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= github.com/youmark/pkcs8 v0.0.0-20181117223130-1be2e3e5546d/go.mod h1:rHwXgn7JulP+udvsHwJoVG1YGAP6VLg4y9I5dyZdqmA= github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= @@ -942,7 +893,6 @@ github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9de github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= -go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= go.etcd.io/bbolt v1.3.7 h1:j+zJOnnEjF/kyHlDDgGnVL/AIqIJPq8UoB2GSNfkUfQ= go.etcd.io/etcd/api/v3 v3.5.9 h1:4wSsluwyTbGGmyjJktOf3wFQoTBIURXHnq9n/G/JQHs= go.etcd.io/etcd/api/v3 v3.5.9/go.mod h1:uyAal843mC8uUVSLWz6eHa/d971iDGnCRpmKd2Z+X8k= @@ -988,17 +938,14 @@ go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqe go.opentelemetry.io/proto/otlp v0.19.0 h1:IVN6GR+mhC4s5yfcTbmzHYODqvWAp3ZedA2SJPI1Nnw= go.opentelemetry.io/proto/otlp v0.19.0/go.mod h1:H7XAot3MsfNsj7EXtrA2q5xSNQ10UqI405h3+duxN4U= go.step.sm/crypto v0.30.0 h1:EzqPTvW1g6kxEnfIf/exDW+MhHGeEhtoNMhQX7P/UwI= -go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= go.uber.org/atomic v1.10.0 h1:9qC72Qh0+3MqyJbAn8YU5xVq1frD8bn3JtD2oXtafVQ= go.uber.org/atomic v1.10.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0= go.uber.org/goleak v1.1.10/go.mod h1:8a7PlsEVH3e/a/GLqe5IIrQx6GzcnRmZEufDUTk4A7A= go.uber.org/goleak v1.2.1 h1:NBol2c7O1ZokfZ0LEU9K6Whx/KnwvepVetCUhtKja4A= -go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= -go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= go.uber.org/zap v1.18.1/go.mod h1:xg/QME4nWcxGxrpdeYfq7UvYrLh66cuVKdrbD1XF/NI= go.uber.org/zap v1.24.0 h1:FiJd5l1UOLj0wCgbSE0rwwXHzEdAZS6hiiSnxJN/D60= go.uber.org/zap v1.24.0/go.mod h1:2kMP+WWQ8aoFoedH3T2sq6iJ2yDWpHbP0f6MQbS9Gkg= @@ -1061,15 +1008,12 @@ golang.org/x/mod v0.10.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/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-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190522155817-f3200d17e092/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= @@ -1139,8 +1083,6 @@ golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5h golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180926160741-c2ed4eda69e7/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190221075227-b4e8571b14e0/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -1158,7 +1100,6 @@ golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -1185,7 +1126,6 @@ golang.org/x/sys v0.0.0-20210112080510-489259a85091/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210225134936-a50acf3fe073/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210313202042-bd2e13477e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210420072515-93ed5bcd2bfe/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -1238,7 +1178,6 @@ golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxb golang.org/x/time v0.0.0-20210220033141-f8bda1e9f3ba/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.3.0 h1:rg5rLMjNzMS1RkNLzCG38eapWhnYLFYXDXj2gOlr8j4= golang.org/x/time v0.3.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= @@ -1254,7 +1193,6 @@ golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBn golang.org/x/tools v0.0.0-20190531172133-b3315ee88b7d/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190624222133-a101b041ded4/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190729092621-ff9f1409240a/go.mod h1:jcCCGcm9btYwXyDqrUWc6MKQKKGJCWEQ3AfLSRIbEuI= golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= @@ -1385,7 +1323,6 @@ google.golang.org/genproto/googleapis/rpc v0.0.0-20230530153820-e85fd2cbaebc h1: google.golang.org/genproto/googleapis/rpc v0.0.0-20230530153820-e85fd2cbaebc/go.mod h1:66JfowdXAEgad5O9NnYcsNPLCPZJD++2L9X0PCMODrA= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= -google.golang.org/grpc v1.21.0/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= @@ -1421,7 +1358,6 @@ google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQ google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= google.golang.org/protobuf v1.30.0 h1:kPPoIgf3TsEvrm0PFe15JQ+570QVxYzEvvHqChK+cng= google.golang.org/protobuf v1.30.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= -gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= gopkg.in/alexcesaro/statsd.v2 v2.0.0 h1:FXkZSCZIH17vLCO5sO2UucTHsH9pc+17F6pl3JVCwMc= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= @@ -1437,7 +1373,6 @@ gopkg.in/ini.v1 v1.67.0 h1:Dgnx+6+nfE+IfzjUEISNeydPJh9AXNNsWbGP9KzCsOA= gopkg.in/ini.v1 v1.67.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/natefinch/lumberjack.v2 v2.0.0 h1:1Lc07Kr7qY4U2YPouBjpCLxpiyxIVoxqXgkXLknAOE8= gopkg.in/natefinch/lumberjack.v2 v2.0.0/go.mod h1:l0ndWWf7gzL7RNwBG7wST/UCcT4T24xpD6X8LsfU/+k= -gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo= gopkg.in/square/go-jose.v2 v2.6.0 h1:NGk74WTnPKBNUhNzQX7PYcTLUjoq7mzKk2OKbvwk2iI= gopkg.in/square/go-jose.v2 v2.6.0/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI= gopkg.in/src-d/go-billy.v4 v4.3.2 h1:0SQA1pRztfTFx2miS8sA97XvooFeNOmvUenF4o0EcVg= @@ -1450,8 +1385,6 @@ gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkep gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= gopkg.in/warnings.v0 v0.1.2 h1:wFXVbFY8DY5/xOe1ECiWdKCzZlxgshcYVNkBHstARME= gopkg.in/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI= -gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74= -gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= @@ -1466,7 +1399,6 @@ gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gotest.tools v2.2.0+incompatible h1:VsBPFP1AI068pPrMxtb/S8Zkgf9xEmTLJjfM+P5UIEo= -gotest.tools/v3 v3.0.3/go.mod h1:Z7Lb0S5l+klDB31fvDQX8ss/FlKDxtlFlw3Oa8Ymbl8= gotest.tools/v3 v3.1.0 h1:rVV8Tcg/8jHUkPUorwjaMTtemIMVXfIPKiOqnhEhakk= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= diff --git a/pkg/apis/api.acorn.io/v1/types.go b/pkg/apis/api.acorn.io/v1/types.go index 3d7b06389..e631ccabb 100644 --- a/pkg/apis/api.acorn.io/v1/types.go +++ b/pkg/apis/api.acorn.io/v1/types.go @@ -426,6 +426,7 @@ type Config struct { IgnoreUserLabelsAndAnnotations *bool `json:"ignoreUserLabelsAndAnnotations" name:"ignore-user-labels-and-annotations" usage:"Don't propagate user-defined labels and annotations to dependent objects"` AllowUserLabels []string `json:"allowUserLabels" name:"allow-user-label" usage:"Allow these labels to propagate to dependent objects, no effect if --ignore-user-labels-and-annotations not true"` AllowUserAnnotations []string `json:"allowUserAnnotations" name:"allow-user-annotation" usage:"Allow these annotations to propagate to dependent objects, no effect if --ignore-user-labels-and-annotations not true"` + AllowUserMetadataNamespaces []string `json:"allowUserMetadataNamespaces" name:"allow-user-metadata-namespace" usage:"Allow these namespaces to propagate labels and annotations to dependent objects, no effect if --ignore-user-labels-and-annotations not true"` WorkloadMemoryDefault *int64 `json:"workloadMemoryDefault" name:"workload-memory-default" quantity:"true" usage:"Set the default memory for acorn workloads. Accepts binary suffixes (Ki, Mi, Gi, etc) and \".\" and \"_\" seperators (default 0)" short:"m"` WorkloadMemoryMaximum *int64 `json:"workloadMemoryMaximum" name:"workload-memory-maximum" quantity:"true" usage:"Set the maximum memory for acorn workloads. Accepts binary suffixes (Ki, Mi, Gi, etc) and \".\" and \"_\" seperators (default 0)"` UseCustomCABundle *bool `json:"useCustomCABundle" name:"use-custom-ca-bundle" usage:"Use CA bundle for admin supplied secret for all acorn control plane components. Defaults to false."` diff --git a/pkg/apis/api.acorn.io/v1/zz_generated.deepcopy.go b/pkg/apis/api.acorn.io/v1/zz_generated.deepcopy.go index 428ce3a8b..91ef34aaa 100644 --- a/pkg/apis/api.acorn.io/v1/zz_generated.deepcopy.go +++ b/pkg/apis/api.acorn.io/v1/zz_generated.deepcopy.go @@ -466,6 +466,11 @@ func (in *Config) DeepCopyInto(out *Config) { *out = make([]string, len(*in)) copy(*out, *in) } + if in.AllowUserMetadataNamespaces != nil { + in, out := &in.AllowUserMetadataNamespaces, &out.AllowUserMetadataNamespaces + *out = make([]string, len(*in)) + copy(*out, *in) + } if in.WorkloadMemoryDefault != nil { in, out := &in.WorkloadMemoryDefault, &out.WorkloadMemoryDefault *out = new(int64) diff --git a/pkg/apis/internal.acorn.io/v1/appstatus.go b/pkg/apis/internal.acorn.io/v1/appstatus.go index 9d97462a8..d1a1819de 100644 --- a/pkg/apis/internal.acorn.io/v1/appstatus.go +++ b/pkg/apis/internal.acorn.io/v1/appstatus.go @@ -30,6 +30,9 @@ func (e *ExpressionError) String() string { if e.DependencyNotFound == nil { return "error [" + e.Error + "] expression [" + e.Expression + "]" } + if e.Expression != "" { + return fmt.Sprintf("missing %s [%s] from expression [%s]", e.DependencyNotFound.DependencyType, e.DependencyNotFound.Name, e.Expression) + } return fmt.Sprintf("missing %s [%s]", e.DependencyNotFound.DependencyType, e.DependencyNotFound.Name) } diff --git a/pkg/apis/internal.acorn.io/v1/build.go b/pkg/apis/internal.acorn.io/v1/build.go index f848a751e..30298f8bc 100644 --- a/pkg/apis/internal.acorn.io/v1/build.go +++ b/pkg/apis/internal.acorn.io/v1/build.go @@ -94,12 +94,13 @@ type AcornImageBuildInstance struct { } type AcornImageBuildInstanceSpec struct { - BuilderName string `json:"builderName,omitempty" wrangler:"required"` - Acornfile string `json:"acornfile,omitempty"` - Profiles []string `json:"profiles,omitempty"` - Platforms []Platform `json:"platforms,omitempty"` - Args GenericMap `json:"args,omitempty"` - VCS VCS `json:"vcs,omitempty"` + ContextCacheKey string `json:"contextCacheKey,omitempty"` + BuilderName string `json:"builderName,omitempty" wrangler:"required"` + Acornfile string `json:"acornfile,omitempty"` + Profiles []string `json:"profiles,omitempty"` + Platforms []Platform `json:"platforms,omitempty"` + Args GenericMap `json:"args,omitempty"` + VCS VCS `json:"vcs,omitempty"` } type AcornImageBuildInstanceStatus struct { diff --git a/pkg/apis/internal.acorn.io/v1/unmarshal.go b/pkg/apis/internal.acorn.io/v1/unmarshal.go index eb32f6b48..52dcf80fa 100644 --- a/pkg/apis/internal.acorn.io/v1/unmarshal.go +++ b/pkg/apis/internal.acorn.io/v1/unmarshal.go @@ -273,9 +273,6 @@ func (in *VolumeBinding) UnmarshalJSON(data []byte) error { func impliedSecretsForContainer(app *AppSpec, container Container) { for _, env := range container.Environment { - if strings.Contains(env.Secret.Name, ".") { - continue - } if _, ok := app.Secrets[env.Secret.Name]; env.Secret.Name != "" && !ok { app.Secrets[env.Secret.Name] = Secret{ Type: "opaque", @@ -406,6 +403,9 @@ func addImpliedResources(in *AppSpec) error { for _, a := range in.Acorns { for _, volumeBinding := range a.Volumes { + if strings.Contains(volumeBinding.Volume, ".") { + continue + } if _, ok := in.Volumes[volumeBinding.Volume]; !ok { in.Volumes[volumeBinding.Volume] = VolumeRequest{ Size: volumeBinding.Size, @@ -414,6 +414,9 @@ func addImpliedResources(in *AppSpec) error { } } for _, secretBinding := range a.Secrets { + if strings.Contains(secretBinding.Secret, ".") { + continue + } if _, ok := in.Secrets[secretBinding.Secret]; !ok { in.Secrets[secretBinding.Secret] = Secret{ Type: "opaque", diff --git a/pkg/appdefinition/lookup.go b/pkg/appdefinition/lookup.go index ba01a80f7..586e56ea3 100644 --- a/pkg/appdefinition/lookup.go +++ b/pkg/appdefinition/lookup.go @@ -1,7 +1,6 @@ package appdefinition import ( - "reflect" "strings" v1 "github.com/acorn-io/runtime/pkg/apis/internal.acorn.io/v1" @@ -93,12 +92,11 @@ func findAcornImage(imageData v1.ImagesData, image string, acornBuild *v1.AcornB if testBuild == nil { continue } - if !reflect.DeepEqual(*acornBuild, *testBuild) { + if !equality.Semantic.DeepEqual(*acornBuild, *testBuild) { continue } if build.ImageKey != "" { - image, ok := imageData.Acorns[build.ImageKey] - return image.Image, ok + return findImageInImageData(imageData, build.ImageKey) } return image, image != "" } diff --git a/pkg/build/build.go b/pkg/build/build.go index fce2b4ed6..338568d6a 100644 --- a/pkg/build/build.go +++ b/pkg/build/build.go @@ -53,7 +53,7 @@ type buildContext struct { func Build(ctx context.Context, messages buildclient.Messages, pushRepo, buildNamespace string, opts v1.AcornImageBuildInstanceSpec, keychain authn.Keychain, remoteOpts ...remote.Option) (*v1.AppImage, error) { remoteKc := NewRemoteKeyChain(messages, keychain) buildContext := &buildContext{ - ctx: ctx, + ctx: buildkit.WithContextCacheKey(ctx, opts.ContextCacheKey), cwd: "", pushRepo: pushRepo, buildNamespace: buildNamespace, diff --git a/pkg/build/buildkit/build.go b/pkg/build/buildkit/build.go index 1659558cb..bd1569e95 100644 --- a/pkg/build/buildkit/build.go +++ b/pkg/build/buildkit/build.go @@ -2,20 +2,34 @@ package buildkit import ( "context" + "encoding/json" "fmt" "path/filepath" v1 "github.com/acorn-io/runtime/pkg/apis/internal.acorn.io/v1" "github.com/acorn-io/runtime/pkg/build/authprovider" "github.com/acorn-io/runtime/pkg/buildclient" + "github.com/acorn-io/runtime/pkg/digest" cplatforms "github.com/containerd/containerd/platforms" "github.com/google/go-containerregistry/pkg/authn" "github.com/google/uuid" buildkit "github.com/moby/buildkit/client" "github.com/moby/buildkit/session" ocispecs "github.com/opencontainers/image-spec/specs-go/v1" + "github.com/sirupsen/logrus" ) +type cacheKey struct{} + +func WithContextCacheKey(ctx context.Context, key string) context.Context { + return context.WithValue(ctx, cacheKey{}, key) +} + +func getCacheKey(ctx context.Context) string { + v, _ := ctx.Value(cacheKey{}).(string) + return v +} + func Build(ctx context.Context, pushRepo string, local bool, cwd string, platforms []v1.Platform, build v1.Build, messages buildclient.Messages, keychain authn.Keychain) ([]v1.Platform, []string, error) { bkc, err := buildkit.New(ctx, "") if err != nil { @@ -50,9 +64,15 @@ func Build(ctx context.Context, pushRepo string, local bool, cwd string, platfor } } + buildData, _ := json.Marshal(build) + sharedKey := digest.SHA256(getCacheKey(ctx), cwd, string(buildData), fmt.Sprint(local)) + logrus.Debugf("sharedKey=[%s] cacheKey=[%s] cwd=[%s], buildData=[%s] local=[%v]", + sharedKey, getCacheKey(ctx), cwd, buildData, local) + for _, platform := range platforms { options := buildkit.SolveOpt{ - Frontend: "dockerfile.v0", + SharedKey: sharedKey, + Frontend: "dockerfile.v0", FrontendAttrs: map[string]string{ "target": build.Target, "filename": dockerfileName, diff --git a/pkg/buildclient/filesync.go b/pkg/buildclient/filesync.go index 704eef1f8..a8def228c 100644 --- a/pkg/buildclient/filesync.go +++ b/pkg/buildclient/filesync.go @@ -47,6 +47,7 @@ func (f *FileServer) DiffCopy(server filesync.FileSync_DiffCopyServer) error { err := f.messages.Send(&Message{ FileSessionID: sessionID, SyncOptions: &SyncOptions{ + Compress: true, Context: f.context, Dockerfile: f.dockerfilePath, DockerfileContents: f.dockerfileContents, diff --git a/pkg/buildclient/filesyncclient.go b/pkg/buildclient/filesyncclient.go index b14a4a1f7..bacee2823 100644 --- a/pkg/buildclient/filesyncclient.go +++ b/pkg/buildclient/filesyncclient.go @@ -10,6 +10,7 @@ import ( "github.com/moby/buildkit/session/filesync" "github.com/sirupsen/logrus" + "github.com/tonistiigi/fsutil" "github.com/tonistiigi/fsutil/types" fstypes "github.com/tonistiigi/fsutil/types" "google.golang.org/grpc/metadata" @@ -22,6 +23,7 @@ var ( ) type fileSyncClient struct { + compress bool sessionID string messages Messages msg <-chan *Message @@ -54,8 +56,9 @@ func newFileSyncClient(ctx context.Context, cwd, sessionID string, messages Mess keyExporterMetaPrefix: opts.ExporterMetaPrefix, } - logrus.Tracef("starting file sync client %s", sessionID) + logrus.Tracef("starting file sync client %s, compress=%v", sessionID, opts.Compress) fsClient := &fileSyncClient{ + compress: opts.Compress, sessionID: sessionID, messages: messages, tempDir: tempDir, @@ -104,7 +107,7 @@ func createFileMapInput(cwd string, opts *SyncOptions) (string, map[string]strin }, nil } -func prepareSyncedDirs(localDirs map[string]string, dirNames []string, followPaths []string) ([]filesync.SyncedDir, error) { +func prepareSyncedDirs(localDirs map[string]string, dirNames []string, followPaths []string) (filesync.StaticDirSource, error) { for localDirName, d := range localDirs { fi, err := os.Stat(d) if os.IsNotExist(err) { @@ -141,19 +144,20 @@ func prepareSyncedDirs(localDirs map[string]string, dirNames []string, followPat } } } - resetUIDAndGID := func(p string, st *fstypes.Stat) bool { + resetUIDAndGID := func(p string, st *fstypes.Stat) fsutil.MapResult { st.Uid = 0 st.Gid = 0 - return true + return fsutil.MapResultKeep } - dirs := make([]filesync.SyncedDir, 0, len(localDirs)) + dirs := make(filesync.StaticDirSource, len(localDirs)) for name, d := range localDirs { - dirs = append(dirs, filesync.SyncedDir{Name: name, Dir: d, Map: resetUIDAndGID}) + dirs[name] = filesync.SyncedDir{Dir: d, Map: resetUIDAndGID} } return dirs, nil } + func (s *fileSyncClient) Send(obj *types.Packet) error { return s.SendMsg(obj) } @@ -188,6 +192,7 @@ func (s *fileSyncClient) Close() { func (s *fileSyncClient) SendMsg(m interface{}) error { return s.messages.Send(&Message{ + Compress: s.compress, FileSessionID: s.sessionID, Packet: m.(*types.Packet), }) diff --git a/pkg/buildclient/messages.go b/pkg/buildclient/messages.go index b13569ccf..8650c5509 100644 --- a/pkg/buildclient/messages.go +++ b/pkg/buildclient/messages.go @@ -1,8 +1,11 @@ package buildclient import ( + "bytes" + "compress/gzip" "context" "encoding/json" + "io" "sync" "github.com/acorn-io/mink/pkg/channel" @@ -42,7 +45,84 @@ type Message struct { RegistryAuth *apiv1.RegistryAuth `json:"registryAuth,omitempty"` SyncOptions *SyncOptions `json:"syncOptions,omitempty"` Packet *types.Packet `json:"packet,omitempty"` + PacketData []byte `json:"packetData,omitempty"` Status *client.SolveStatus `json:"status,omitempty"` + Compress bool `json:"compress,omitempty"` +} + +type message Message + +func (m *Message) UnmarshalJSON(data []byte) error { + if err := json.Unmarshal(data, (*message)(m)); err != nil { + return err + } + if len(m.PacketData) == 0 { + return nil + } + + packetData, err := decompress(m.PacketData) + if err != nil { + return err + } + p := &types.Packet{} + if err := p.Unmarshal(packetData); err != nil { + return err + } + + m.Packet = p + m.PacketData = nil + return nil +} + +func decompress(data []byte) ([]byte, error) { + r, err := gzip.NewReader(bytes.NewReader(data)) + if err != nil { + return nil, err + } + + newData, err := io.ReadAll(r) + if err != nil { + return data, err + } + + return newData, nil +} + +func compress(data []byte) []byte { + buf := &bytes.Buffer{} + w := gzip.NewWriter(buf) + _, err := w.Write(data) + if err != nil { + return data + } + + if err := w.Close(); err != nil { + return data + } + return buf.Bytes() +} + +func (m *Message) MarshalJSON() ([]byte, error) { + if !m.Compress || m.Packet == nil || m.Packet.Type != types.PACKET_DATA { + return json.Marshal((*message)(m)) + } + + data, err := m.Packet.Marshal() + if err != nil { + return nil, err + } + + data = compress(data) + + cp := (message)(*m) + cp.PacketData = data + if len(cp.PacketData) > 0 { + pcp := *cp.Packet + pcp.Data = nil + cp.Packet = &pcp + } + + return json.Marshal(cp) } func (m *Message) String() string { @@ -61,6 +141,7 @@ type SyncOptions struct { FollowPaths []string DirName []string ExporterMetaPrefix []string + Compress bool } type WebsocketMessages struct { diff --git a/pkg/client/app.go b/pkg/client/app.go index c7cc64dbd..1903d0198 100644 --- a/pkg/client/app.go +++ b/pkg/client/app.go @@ -275,7 +275,7 @@ func translatePermissions(err error) error { } } } - return nil + return err } func (c *DefaultClient) AppLog(ctx context.Context, name string, opts *LogOptions) (<-chan apiv1.LogMessage, error) { diff --git a/pkg/client/build.go b/pkg/client/build.go index 0ecf88ec7..cb5419e42 100644 --- a/pkg/client/build.go +++ b/pkg/client/build.go @@ -2,13 +2,16 @@ package client import ( "context" + "os" "path/filepath" "github.com/acorn-io/aml/pkg/cue" apiv1 "github.com/acorn-io/runtime/pkg/apis/api.acorn.io/v1" v1 "github.com/acorn-io/runtime/pkg/apis/internal.acorn.io/v1" "github.com/acorn-io/runtime/pkg/buildclient" + "github.com/acorn-io/runtime/pkg/digest" "github.com/acorn-io/runtime/pkg/vcs" + "github.com/denisbrodbeck/machineid" "github.com/gorilla/websocket" "github.com/sirupsen/logrus" apierrors "k8s.io/apimachinery/pkg/api/errors" @@ -41,6 +44,20 @@ func (c *DefaultClient) AcornImageBuildList(ctx context.Context) ([]apiv1.AcornI return builders.Items, err } +func BuildClientID(image, file string) string { + hashSource := file + if hashSource == "" { + hashSource = image + } + cwd, _ := os.Getwd() + id, _ := machineid.ProtectedID("acorn") + if id == "" { + id, _ = os.Hostname() + } + hashSource = filepath.Join(cwd, hashSource) + return digest.SHA256(id, hashSource)[:12] +} + func (c *DefaultClient) AcornImageBuild(ctx context.Context, file string, opts *AcornImageBuildOptions) (*v1.AppImage, error) { opts, err := opts.complete() if err != nil { @@ -66,12 +83,13 @@ func (c *DefaultClient) AcornImageBuild(ctx context.Context, file string, opts * Namespace: c.Namespace, }, Spec: v1.AcornImageBuildInstanceSpec{ - BuilderName: opts.BuilderName, - Acornfile: string(fileData), - Platforms: opts.Platforms, - Args: opts.Args, - Profiles: opts.Profiles, - VCS: vcs, + ContextCacheKey: BuildClientID("", file), + BuilderName: opts.BuilderName, + Acornfile: string(fileData), + Platforms: opts.Platforms, + Args: opts.Args, + Profiles: opts.Profiles, + VCS: vcs, }, } diff --git a/pkg/controller/appdefinition/deploy.go b/pkg/controller/appdefinition/deploy.go index 5ec7299c9..3830e636a 100644 --- a/pkg/controller/appdefinition/deploy.go +++ b/pkg/controller/appdefinition/deploy.go @@ -10,7 +10,6 @@ import ( "strconv" "strings" - "github.com/acorn-io/baaah/pkg/apply" "github.com/acorn-io/baaah/pkg/router" "github.com/acorn-io/baaah/pkg/typed" v1 "github.com/acorn-io/runtime/pkg/apis/internal.acorn.io/v1" @@ -47,7 +46,7 @@ func FilterLabelsAndAnnotationsConfig(h router.Handler) router.Handler { // Note that IgnoreUserLabelsAndAnnotations will not be nil here because // config.Get "completes" the config object to fill in default values. if *cfg.IgnoreUserLabelsAndAnnotations { - req.Object = labels.FilterUserDefined(appInstance, cfg.AllowUserLabels, cfg.AllowUserAnnotations) + req.Object = labels.FilterUserDefined(appInstance, cfg.AllowUserLabels, cfg.AllowUserAnnotations, cfg.AllowUserMetadataNamespaces) } return h.Handle(req, resp) @@ -551,36 +550,40 @@ func getRevision(req router.Request, namespace, secretName string) (string, erro func getSecretAnnotations(req router.Request, appInstance *v1.AppInstance, container v1.Container, interpolator *secrets.Interpolator) (map[string]string, error) { var ( - secrets []string - result = map[string]string{} + secretNames = sets.New[string]() + result = map[string]string{} ) for _, env := range container.Environment { if env.Secret.OnChange == v1.ChangeTypeRedeploy { - secrets = append(secrets, env.Secret.Name) + secretNames.Insert(env.Secret.Name) } } for _, file := range container.Files { if file.Secret.OnChange == v1.ChangeTypeRedeploy { - secrets = append(secrets, file.Secret.Name) + secretNames.Insert(file.Secret.Name) } } for _, dir := range container.Dirs { if dir.Secret.OnChange == v1.ChangeTypeRedeploy { - secrets = append(secrets, dir.Secret.Name) + secretNames.Insert(dir.Secret.Name) } } - for _, secret := range secrets { + for _, secret := range sets.List(secretNames) { if secret == "" { continue } rev, err := getRevision(req, appInstance.Status.Namespace, secret) if apierror.IsNotFound(err) { - if !appInstance.GetStopped() { - result[apply.AnnotationUpdate] = "false" - } - result[apply.AnnotationCreate] = "false" + interpolator.AddError(&secrets.ErrInterpolation{ + ExpressionError: v1.ExpressionError{ + DependencyNotFound: &v1.DependencyNotFound{ + DependencyType: v1.DependencySecret, + Name: secret, + }, + }, + }) } else if err != nil { return nil, err } @@ -659,7 +662,7 @@ func toDeployment(req router.Request, appInstance *v1.AppInstance, tag name.Refe if appInstance.Spec.Stop != nil && *appInstance.Spec.Stop { dep.Spec.Replicas = new(int32) } else { - interpolator.AddMissingAnnotations(dep.Annotations) + interpolator.AddMissingAnnotations(appInstance.GetStopped(), dep.Annotations) } return dep, nil diff --git a/pkg/controller/appdefinition/jobs.go b/pkg/controller/appdefinition/jobs.go index e7aab653f..b79d89ffd 100644 --- a/pkg/controller/appdefinition/jobs.go +++ b/pkg/controller/appdefinition/jobs.go @@ -156,7 +156,7 @@ func toJob(req router.Request, appInstance *v1.AppInstance, pullSecrets *PullSec }, } - interpolator.AddMissingAnnotations(baseAnnotations) + interpolator.AddMissingAnnotations(appInstance.GetStopped(), baseAnnotations) if container.Schedule == "" { jobSpec.BackoffLimit = &[]int32{1000}[0] diff --git a/pkg/controller/appstatus/acorns.go b/pkg/controller/appstatus/acorns.go index 95cd4c4e7..2f81ce6c0 100644 --- a/pkg/controller/appstatus/acorns.go +++ b/pkg/controller/appstatus/acorns.go @@ -26,8 +26,12 @@ func (a *appStatusRenderer) readAcorns() error { } if s.LinkOverride != "" { + var err error s.UpToDate = true - s.Ready, _ = a.isServiceReady(acornName) + s.Ready, _, err = a.isServiceReady(acornName) + if err != nil { + return err + } a.app.Status.AppStatus.Acorns[acornName] = s continue } diff --git a/pkg/controller/appstatus/appstatus.go b/pkg/controller/appstatus/appstatus.go index bf642635b..7a1583a02 100644 --- a/pkg/controller/appstatus/appstatus.go +++ b/pkg/controller/appstatus/appstatus.go @@ -28,11 +28,13 @@ func PrepareStatus(req router.Request, _ router.Response) error { // dependency status will be set correctly. status.Ready = status.Ready && app.Generation == app.Status.ObservedGeneration status.ExpressionErrors = nil + status.Dependencies = nil app.Status.AppStatus.Containers[name] = status } for name, status := range app.Status.AppStatus.Jobs { status.ExpressionErrors = nil + status.Dependencies = nil if app.Generation != app.Status.ObservedGeneration && jobs.ShouldRun(name, app) { // If a job is going to run again, then set its status to not ready so that the controller will run it again and the // dependency status will be set correctly. @@ -60,6 +62,18 @@ func PrepareStatus(req router.Request, _ router.Response) error { app.Status.AppStatus.Jobs = map[string]v1.JobStatus{} } + if app.Status.AppStatus.Acorns == nil { + app.Status.AppStatus.Acorns = map[string]v1.AcornStatus{} + } + + if app.Status.AppStatus.Services == nil { + app.Status.AppStatus.Services = map[string]v1.ServiceStatus{} + } + + if app.Status.AppStatus.Secrets == nil { + app.Status.AppStatus.Secrets = map[string]v1.SecretStatus{} + } + return nil } diff --git a/pkg/controller/appstatus/containers.go b/pkg/controller/appstatus/containers.go index 7b47b434f..514d5ac28 100644 --- a/pkg/controller/appstatus/containers.go +++ b/pkg/controller/appstatus/containers.go @@ -38,6 +38,7 @@ func (a *appStatusRenderer) readContainers() error { cs.LinkOverride = ports.LinkService(a.app, containerName) cs.ErrorMessages = append(cs.ErrorMessages, summary.ErrorMessages...) cs.ExpressionErrors = existingStatus[containerName].ExpressionErrors + cs.Dependencies = existingStatus[containerName].Dependencies cs.TransitioningMessages = append(cs.TransitioningMessages, summary.TransitioningMessages...) cs.MaxReplicaRestartCount = summary.MaxReplicaRestartCount @@ -64,8 +65,12 @@ func (a *appStatusRenderer) readContainers() error { } if cs.LinkOverride != "" { + var err error cs.UpToDate = true - cs.Ready, cs.Defined = a.isServiceReady(containerName) + cs.Ready, cs.Defined, err = a.isServiceReady(containerName) + if err != nil { + return err + } } if len(cs.TransitioningMessages) > 0 { diff --git a/pkg/controller/appstatus/jobs.go b/pkg/controller/appstatus/jobs.go index c2c1c2c5c..e850617a9 100644 --- a/pkg/controller/appstatus/jobs.go +++ b/pkg/controller/appstatus/jobs.go @@ -31,6 +31,7 @@ func (a *appStatusRenderer) readJobs() error { CreateEventSucceeded: existingStatus[jobName].CreateEventSucceeded, Skipped: existingStatus[jobName].Skipped, ExpressionErrors: existingStatus[jobName].ExpressionErrors, + Dependencies: existingStatus[jobName].Dependencies, } summary := summary[jobName] @@ -91,8 +92,12 @@ func (a *appStatusRenderer) readJobs() error { } if c.LinkOverride != "" { + var err error c.UpToDate = true - c.Ready, c.Defined = a.isServiceReady(jobName) + c.Ready, c.Defined, err = a.isServiceReady(jobName) + if err != nil { + return err + } if c.Ready { c.CreateEventSucceeded = true } diff --git a/pkg/controller/appstatus/routers.go b/pkg/controller/appstatus/routers.go index 8958a088f..ddecb096b 100644 --- a/pkg/controller/appstatus/routers.go +++ b/pkg/controller/appstatus/routers.go @@ -30,7 +30,11 @@ func (a *appStatusRenderer) readRouter() error { s.Defined = true } - s.Ready, _ = a.isServiceReady(routerName) + s.Ready, _, err = a.isServiceReady(routerName) + if err != nil { + return err + } + s.Ready = s.Defined && s.Ready a.app.Status.AppStatus.Routers[routerName] = s } diff --git a/pkg/controller/appstatus/services.go b/pkg/controller/appstatus/services.go index ea3c9db14..a4a67eeb8 100644 --- a/pkg/controller/appstatus/services.go +++ b/pkg/controller/appstatus/services.go @@ -7,14 +7,17 @@ import ( name2 "github.com/acorn-io/baaah/pkg/name" "github.com/acorn-io/baaah/pkg/router" + "github.com/acorn-io/baaah/pkg/typed" v1 "github.com/acorn-io/runtime/pkg/apis/internal.acorn.io/v1" "github.com/acorn-io/runtime/pkg/config" "github.com/acorn-io/runtime/pkg/labels" "github.com/acorn-io/runtime/pkg/ports" "github.com/acorn-io/runtime/pkg/publicname" "github.com/acorn-io/runtime/pkg/ref" + "golang.org/x/exp/slices" corev1 "k8s.io/api/core/v1" apierrors "k8s.io/apimachinery/pkg/api/errors" + "sigs.k8s.io/controller-runtime/pkg/client" ) func (a *appStatusRenderer) readServices() error { @@ -23,7 +26,8 @@ func (a *appStatusRenderer) readServices() error { // reset state a.app.Status.AppStatus.Services = make(map[string]v1.ServiceStatus, len(a.app.Status.AppSpec.Services)) - for serviceName, serviceDef := range a.app.Status.AppSpec.Services { + for _, entry := range typed.Sorted(a.app.Status.AppSpec.Services) { + serviceName, serviceDef := entry.Key, entry.Value s := v1.ServiceStatus{ CommonStatus: v1.CommonStatus{ LinkOverride: ports.LinkService(a.app, serviceName), @@ -31,7 +35,11 @@ func (a *appStatusRenderer) readServices() error { ExpressionErrors: existingStatus[serviceName].ExpressionErrors, } - s.Ready, s.Defined = a.isServiceReady(serviceName) + var err error + s.Ready, s.Defined, err = a.isServiceReady(serviceName) + if err != nil { + return err + } if s.LinkOverride == "" && serviceDef.Image != "" { s.ServiceAcornName = publicname.ForChild(a.app, serviceName) @@ -59,6 +67,7 @@ func (a *appStatusRenderer) readServices() error { s.Defined = s.Defined || !service.Status.HasService s.UpToDate = service.Namespace != a.app.Status.Namespace || service.Annotations[labels.AcornAppGeneration] == strconv.Itoa(int(a.app.Generation)) + s.UpToDate = s.Defined && s.UpToDate s.Ready = (s.Ready || !service.Status.HasService) && s.UpToDate if s.ServiceAcornName != "" { s.Ready = s.Ready && s.ServiceAcornReady @@ -109,57 +118,60 @@ func (a *appStatusRenderer) readServices() error { return nil } -func (a *appStatusRenderer) isServiceReady(svc string) (ready bool, found bool) { - return a.isServiceReadyByNamespace(a.app.Status.Namespace, svc) +func (a *appStatusRenderer) isServiceReady(svc string) (ready bool, found bool, err error) { + return a.isServiceReadyByNamespace(nil, a.app.Status.Namespace, svc) } -func (a *appStatusRenderer) isServiceReadyByNamespace(namespace, svc string) (ready bool, found bool) { +func (a *appStatusRenderer) isServiceReadyByNamespace(seen []client.ObjectKey, namespace, svc string) (ready bool, found bool, err error) { + if slices.Contains(seen, router.Key(namespace, svc)) { + return false, false, fmt.Errorf("circular service dependency on %s/%s: %v", namespace, svc, seen) + } + seen = append(seen, router.Key(namespace, svc)) + var svcDep corev1.Service - err := a.c.Get(a.ctx, router.Key(namespace, svc), &svcDep) + err = a.c.Get(a.ctx, router.Key(namespace, svc), &svcDep) if apierrors.IsNotFound(err) { - return false, false + return false, false, nil } if err != nil { // if err just return it as not ready - return false, true + return false, true, err } if svcDep.Labels[labels.AcornManaged] != "true" { // for services we don't manage, just return ready always - return true, true + return true, true, nil } if svcDep.Spec.ExternalName != "" { cfg, err := config.Get(a.ctx, a.c) if err != nil { // if err just return it as not ready - return false, true + return false, true, nil } if strings.HasSuffix(svcDep.Spec.ExternalName, cfg.InternalClusterDomain) { parts := strings.Split(svcDep.Spec.ExternalName, ".") if len(parts) > 2 { - return a.isServiceReadyByNamespace(parts[1], parts[0]) + return a.isServiceReadyByNamespace(seen, parts[1], parts[0]) } } // for unknown external names we just assume they are always ready - return true, true + return true, true, nil } var endpoints corev1.Endpoints err = a.c.Get(a.ctx, router.Key(namespace, svc), &endpoints) if apierrors.IsNotFound(err) { - return false, false - } - if err != nil { - // if err just return it as not ready - return false, true + return false, false, nil + } else if err != nil { + return false, true, err } for _, subset := range endpoints.Subsets { if len(subset.Addresses) > 0 { - return true, true + return true, true, nil } } - return false, true + return false, true, nil } diff --git a/pkg/controller/jobs/output.go b/pkg/controller/jobs/output.go index 9fca8f145..c289f242d 100644 --- a/pkg/controller/jobs/output.go +++ b/pkg/controller/jobs/output.go @@ -135,13 +135,17 @@ func (h *Handler) SaveJobOutput(req router.Request, resp router.Response) error names.Insert(name) } + helperRunning := false for _, status := range append(pod.Status.ContainerStatuses, pod.Status.InitContainerStatuses...) { + if status.Name == jobs.Helper && status.State.Running != nil { + helperRunning = true + } if status.State.Terminated != nil { names.Delete(status.Name) } } - if names.Len() > 0 { + if names.Len() > 0 || !helperRunning { return nil } @@ -170,7 +174,6 @@ func (h *Handler) SaveJobOutput(req router.Request, resp router.Response) error return err } - // ignore error, it always exits with exit code 137 - _, _ = h.runCommand(req.Ctx, pod, "/usr/local/bin/acorn-job-helper-shutdown") - return nil + _, err = h.runCommand(req.Ctx, pod, "/usr/local/bin/acorn-job-helper-shutdown") + return err } diff --git a/pkg/dev/dev.go b/pkg/dev/dev.go index 08f979300..6f707281d 100644 --- a/pkg/dev/dev.go +++ b/pkg/dev/dev.go @@ -5,7 +5,6 @@ import ( "errors" "fmt" "os" - "path/filepath" "sync" "sync/atomic" "time" @@ -15,7 +14,6 @@ import ( apiv1 "github.com/acorn-io/runtime/pkg/apis/api.acorn.io/v1" v1 "github.com/acorn-io/runtime/pkg/apis/internal.acorn.io/v1" "github.com/acorn-io/runtime/pkg/client" - "github.com/acorn-io/runtime/pkg/digest" "github.com/acorn-io/runtime/pkg/imagesource" "github.com/acorn-io/runtime/pkg/labels" "github.com/acorn-io/runtime/pkg/log" @@ -146,7 +144,7 @@ func buildLoop(ctx context.Context, client client.Client, hash clientHash, opts for { select { case <-ctx.Done(): - break + return case <-time.After(2 * time.Minute): } if failed.Swap(false) { @@ -434,22 +432,16 @@ type clientHash struct { Hash string } -func setAppNameAndGetHash(ctx context.Context, client client.Client, opts *Options) (clientHash, *Options, error) { +func setAppNameAndGetHash(ctx context.Context, c client.Client, opts *Options) (clientHash, *Options, error) { image, file, err := opts.ImageSource.ResolveImageAndFile() if err != nil { return clientHash{}, nil, err } - hashSource := file - if hashSource == "" { - hashSource = image - } - cwd, _ := os.Getwd() hostname, _ := os.Hostname() - hashSource = filepath.Join(cwd, hashSource) - hash := digest.SHA256(hostname, hashSource)[:12] + hash := client.BuildClientID(image, file) if opts.Run.Name == "" { - existingName, err := getAppName(ctx, client, hash) + existingName, err := getAppName(ctx, c, hash) if err != nil { return clientHash{}, nil, err } diff --git a/pkg/dev/ports.go b/pkg/dev/ports.go index ea51a6cc1..259634cb1 100644 --- a/pkg/dev/ports.go +++ b/pkg/dev/ports.go @@ -114,7 +114,7 @@ func (f *forwarder) listenLoop(ctx context.Context, container *apiv1.ContainerRe } select { case <-ctx.Done(): - break + return case <-time.After(time.Second): } } diff --git a/pkg/flagparams/flagparams.go b/pkg/flagparams/flagparams.go index d4f841645..e53fe9dbc 100644 --- a/pkg/flagparams/flagparams.go +++ b/pkg/flagparams/flagparams.go @@ -1,6 +1,7 @@ package flagparams import ( + "encoding/json" "os" "strings" @@ -76,9 +77,16 @@ func (f *Flags) Parse(args []string) (map[string]any, error) { } else if strings.HasPrefix(value, "@") { fName := value[1:] val := map[string]any{} - err := cue.UnmarshalFile(fName, &val) - if err != nil { - return nil, err + if strings.HasPrefix(fName, "{") { + err := json.Unmarshal([]byte(fName), &val) + if err != nil { + return nil, err + } + } else { + err := cue.UnmarshalFile(fName, &val) + if err != nil { + return nil, err + } } result[name] = val } else { diff --git a/pkg/imagesystem/buildertemplate.go b/pkg/imagesystem/buildertemplate.go index 04c9317a2..cedfab69b 100644 --- a/pkg/imagesystem/buildertemplate.go +++ b/pkg/imagesystem/buildertemplate.go @@ -51,7 +51,6 @@ func BuilderObjects(name, namespace, forNamespace, buildKitImage, pub, privKey, Image: buildKitImage, Command: []string{"/usr/local/bin/setup-binfmt"}, Args: []string{ - "--debug", "--addr", "unix:///run/buildkit/buildkitd.sock", }, @@ -100,7 +99,7 @@ func BuilderObjects(name, namespace, forNamespace, buildKitImage, pub, privKey, { Name: "service", Image: buildKitImage, - Command: []string{"acorn", "--debug", "--debug-level=9"}, + Command: []string{"acorn"}, Env: []corev1.EnvVar{ { Name: "ACORN_BUILD_SERVER_UUID", diff --git a/pkg/labels/labels.go b/pkg/labels/labels.go index 03d85bf7c..6f6c24c7e 100644 --- a/pkg/labels/labels.go +++ b/pkg/labels/labels.go @@ -129,7 +129,13 @@ func GatherScoped(resourceName, resourceType string, globalLabels, resourceLabel return ExcludeAcornKey(m) } -func FilterUserDefined(appInstance *v1.AppInstance, allowedLabels, allowedAnnotations []string) *v1.AppInstance { +func FilterUserDefined(appInstance *v1.AppInstance, allowedLabels, allowedAnnotations, allowedNamespaces []string) *v1.AppInstance { + for _, ns := range allowedNamespaces { + if appInstance.Namespace == ns { + return appInstance + } + } + appInstance.Spec.Labels = filterScoped(appInstance.Spec.Labels, allowedLabels) appInstance.Spec.Annotations = filterScoped(appInstance.Spec.Annotations, allowedAnnotations) diff --git a/pkg/openapi/generated/openapi_generated.go b/pkg/openapi/generated/openapi_generated.go index 70239cdc9..227eef837 100644 --- a/pkg/openapi/generated/openapi_generated.go +++ b/pkg/openapi/generated/openapi_generated.go @@ -1827,6 +1827,20 @@ func schema_pkg_apis_apiacornio_v1_Config(ref common.ReferenceCallback) common.O }, }, }, + "allowUserMetadataNamespaces": { + SchemaProps: spec.SchemaProps{ + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Default: "", + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, "workloadMemoryDefault": { SchemaProps: spec.SchemaProps{ Type: []string{"integer"}, @@ -1953,7 +1967,7 @@ func schema_pkg_apis_apiacornio_v1_Config(ref common.ReferenceCallback) common.O }, }, }, - Required: []string{"ingressClassName", "clusterDomains", "letsEncrypt", "letsEncryptEmail", "letsEncryptTOSAgree", "setPodSecurityEnforceProfile", "podSecurityEnforceProfile", "httpEndpointPattern", "internalClusterDomain", "acornDNS", "acornDNSEndpoint", "autoUpgradeInterval", "recordBuilds", "publishBuilders", "builderPerProject", "internalRegistryPrefix", "ignoreUserLabelsAndAnnotations", "allowUserLabels", "allowUserAnnotations", "workloadMemoryDefault", "workloadMemoryMaximum", "useCustomCABundle", "propagateProjectAnnotations", "propagateProjectLabels", "manageVolumeClasses", "networkPolicies", "ingressControllerNamespace", "allowTrafficFromNamespace", "serviceLBAnnotations", "awsIdentityProviderArn", "eventTTL", "features", "certManagerIssuer"}, + Required: []string{"ingressClassName", "clusterDomains", "letsEncrypt", "letsEncryptEmail", "letsEncryptTOSAgree", "setPodSecurityEnforceProfile", "podSecurityEnforceProfile", "httpEndpointPattern", "internalClusterDomain", "acornDNS", "acornDNSEndpoint", "autoUpgradeInterval", "recordBuilds", "publishBuilders", "builderPerProject", "internalRegistryPrefix", "ignoreUserLabelsAndAnnotations", "allowUserLabels", "allowUserAnnotations", "allowUserMetadataNamespaces", "workloadMemoryDefault", "workloadMemoryMaximum", "useCustomCABundle", "propagateProjectAnnotations", "propagateProjectLabels", "manageVolumeClasses", "networkPolicies", "ingressControllerNamespace", "allowTrafficFromNamespace", "serviceLBAnnotations", "awsIdentityProviderArn", "eventTTL", "features", "certManagerIssuer"}, }, }, } @@ -5311,6 +5325,12 @@ func schema_pkg_apis_internalacornio_v1_AcornImageBuildInstanceSpec(ref common.R SchemaProps: spec.SchemaProps{ Type: []string{"object"}, Properties: map[string]spec.Schema{ + "contextCacheKey": { + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, "builderName": { SchemaProps: spec.SchemaProps{ Type: []string{"string"}, diff --git a/pkg/secrets/interpolation.go b/pkg/secrets/interpolation.go index 51bf5a70f..c1bfa44db 100644 --- a/pkg/secrets/interpolation.go +++ b/pkg/secrets/interpolation.go @@ -117,13 +117,17 @@ func (i *Interpolator) Incomplete() bool { return i.incomplete[i.jobName] } else if i.containerName != "" { return i.incomplete[i.containerName] + } else if i.serviceName != "" { + return i.incomplete[i.serviceName] } return len(i.incomplete) > 0 } -func (i *Interpolator) AddMissingAnnotations(annotations map[string]string) { +func (i *Interpolator) AddMissingAnnotations(stopped bool, annotations map[string]string) { if i.Incomplete() { - annotations[apply.AnnotationUpdate] = "false" + if !stopped { + annotations[apply.AnnotationUpdate] = "false" + } annotations[apply.AnnotationCreate] = "false" } } @@ -421,6 +425,12 @@ func (i *Interpolator) saveError(err error) { exprError := v1.ExpressionError{ Error: err.Error(), } + if ee := (*ErrInterpolation)(nil); errors.As(err, &ee) { + exprError = ee.ExpressionError + if exprError.Error == "" { + exprError.Error = exprError.String() + } + } if i.containerName != "" { i.incomplete[i.containerName] = true c := i.app.Status.AppStatus.Containers[i.containerName] @@ -443,6 +453,15 @@ func (i *Interpolator) saveError(err error) { } func (i *Interpolator) ToEnv(key, value string) corev1.EnvVar { + newKey, err := i.replace(key) + if err != nil { + i.saveError(err) + return corev1.EnvVar{ + Name: key, + Value: value, + } + } + newValue, err := i.replace(value) if err != nil { i.saveError(err) @@ -453,13 +472,13 @@ func (i *Interpolator) ToEnv(key, value string) corev1.EnvVar { } if value == newValue { return corev1.EnvVar{ - Name: key, + Name: newKey, Value: value, } } return corev1.EnvVar{ - Name: key, + Name: newKey, ValueFrom: &corev1.EnvVarSource{ SecretKeyRef: &corev1.SecretKeySelector{ LocalObjectReference: corev1.LocalObjectReference{ diff --git a/pkg/server/registry/apigroups/acorn/apps/storage.go b/pkg/server/registry/apigroups/acorn/apps/storage.go index ce3bec1c8..7473191e1 100644 --- a/pkg/server/registry/apigroups/acorn/apps/storage.go +++ b/pkg/server/registry/apigroups/acorn/apps/storage.go @@ -29,5 +29,6 @@ func NewStorage(c kclient.WithWatch, clientFactory *client.Factory, recorder eve WithValidateUpdate(validator). WithValidateCreate(validator). WithTableConverter(tables.AppConverter). + WithValidateName(validator). Build() } diff --git a/pkg/server/registry/apigroups/acorn/apps/validator.go b/pkg/server/registry/apigroups/acorn/apps/validator.go index 14ec6d696..5d04d82db 100644 --- a/pkg/server/registry/apigroups/acorn/apps/validator.go +++ b/pkg/server/registry/apigroups/acorn/apps/validator.go @@ -38,9 +38,10 @@ import ( ) type Validator struct { - client kclient.Client - clientFactory *client.Factory - deleter strategy.Deleter + client kclient.Client + clientFactory *client.Factory + deleter strategy.Deleter + allowNestedUpdate bool } func NewValidator(client kclient.Client, clientFactory *client.Factory, deleter strategy.Deleter) *Validator { @@ -51,6 +52,20 @@ func NewValidator(client kclient.Client, clientFactory *client.Factory, deleter } } +func (s *Validator) ValidateName(ctx context.Context, obj runtime.Object) (result field.ErrorList) { + name := obj.(kclient.Object).GetName() + if errs := validation.IsDNS1035Label(name); len(errs) > 0 { + result = append(result, field.Invalid(field.NewPath("metadata", "name"), name, strings.Join(errs, ","))) + } + return +} + +func (s *Validator) AllowNestedUpdate() *Validator { + cp := *s + cp.allowNestedUpdate = true + return &cp +} + func (s *Validator) Get(ctx context.Context, namespace, name string) (types.Object, error) { return s.deleter.Get(ctx, namespace, name) } @@ -173,9 +188,11 @@ func (s *Validator) ValidateUpdate(ctx context.Context, obj, old runtime.Object) newParams := obj.(*apiv1.App) oldParams := old.(*apiv1.App) - if len(strings.Split(newParams.Name, ".")) == 2 && newParams.Name == oldParams.Name && newParams.Labels[labels.AcornParentAcornName] != "" { - result = append(result, field.Invalid(field.NewPath("metadata", "name"), newParams.Name, "To update a nested Acorn or a service, update the parent Acorn instead.")) - return result + if !s.allowNestedUpdate { + if len(strings.Split(newParams.Name, ".")) == 2 && newParams.Name == oldParams.Name && newParams.Labels[labels.AcornParentAcornName] != "" { + result = append(result, field.Invalid(field.NewPath("metadata", "name"), newParams.Name, "To update a nested Acorn or a service, update the parent Acorn instead.")) + return result + } } if oldParams.Status.GetDevMode() { @@ -196,11 +213,6 @@ func (s *Validator) validateName(app *apiv1.App) error { return fmt.Errorf("name is required") } - errs := validation.IsDNS1035Label(app.Name) - if len(errs) > 0 { - return fmt.Errorf(strings.Join(errs, ": ")) - } - return nil } diff --git a/pkg/server/registry/apigroups/acorn/apps/validator_test.go b/pkg/server/registry/apigroups/acorn/apps/validator_test.go index f950eebef..48ea39d6c 100644 --- a/pkg/server/registry/apigroups/acorn/apps/validator_test.go +++ b/pkg/server/registry/apigroups/acorn/apps/validator_test.go @@ -59,7 +59,7 @@ func TestValidateAppName(t *testing.T) { Name: tt.appName, }, } - err := validator.validateName(app) + err := validator.ValidateName(context.Background(), app) if tt.expectValid && err != nil { t.Fatalf("Expected valid, got error: %v", err) } diff --git a/pkg/server/registry/apigroups/acorn/devsessions/storage.go b/pkg/server/registry/apigroups/acorn/devsessions/storage.go index fb3e3a239..8ea6a189e 100644 --- a/pkg/server/registry/apigroups/acorn/devsessions/storage.go +++ b/pkg/server/registry/apigroups/acorn/devsessions/storage.go @@ -18,11 +18,11 @@ func NewStorage(c kclient.WithWatch, cf *client.Factory) rest.Storage { remote.NewRemote(&v1.DevSessionInstance{}, c)) appValidator := apps.NewValidator(c, cf, nil) - strategy := NewValidator(c, appValidator) + devSessionValidator := NewValidator(c, appValidator) return stores.NewBuilder(c.Scheme(), &apiv1.DevSession{}). - WithValidateCreate(strategy). - WithValidateUpdate(strategy). + WithValidateCreate(devSessionValidator). + WithValidateUpdate(devSessionValidator). WithCompleteCRUD(remoteResource). WithValidateName(validator.ValidDNSSubdomain). Build() diff --git a/pkg/server/registry/apigroups/acorn/devsessions/strategy.go b/pkg/server/registry/apigroups/acorn/devsessions/strategy.go index 24aa164d6..640e8d2ae 100644 --- a/pkg/server/registry/apigroups/acorn/devsessions/strategy.go +++ b/pkg/server/registry/apigroups/acorn/devsessions/strategy.go @@ -11,47 +11,47 @@ import ( kclient "sigs.k8s.io/controller-runtime/pkg/client" ) -type Strategy struct { +type Validator struct { client kclient.Client appValidator *apps.Validator } -func NewValidator(c kclient.Client, appValidator *apps.Validator) *Strategy { - return &Strategy{ +func NewValidator(c kclient.Client, appValidator *apps.Validator) *Validator { + return &Validator{ client: c, appValidator: appValidator, } } -func (s *Strategy) Validate(ctx context.Context, obj runtime.Object) (result field.ErrorList) { +func (v *Validator) Validate(ctx context.Context, obj runtime.Object) (result field.ErrorList) { devSession := obj.(*apiv1.DevSession) - if devSession.Spec.SpecOverride == nil { - return nil - } - app := &apiv1.App{} - if err := s.client.Get(ctx, router.Key(devSession.Namespace, devSession.Name), app); err != nil { + if err := v.client.Get(ctx, router.Key(devSession.Namespace, devSession.Name), app); err != nil { result = append(result, field.Invalid(field.NewPath("metadata", "name"), devSession.Name, err.Error())) return } + if devSession.Spec.SpecOverride == nil { + return nil + } + app.Spec = *devSession.Spec.SpecOverride app.Status.DevSession = nil - return s.appValidator.Validate(ctx, app) + return v.appValidator.Validate(ctx, app) } -func (s *Strategy) ValidateUpdate(ctx context.Context, obj, old runtime.Object) (result field.ErrorList) { +func (v *Validator) ValidateUpdate(ctx context.Context, obj, old runtime.Object) (result field.ErrorList) { oldObj := old.(*apiv1.DevSession) newObj := obj.(*apiv1.DevSession) if oldObj.Spec.SpecOverride == nil { - return s.Validate(ctx, obj) + return v.Validate(ctx, obj) } else if newObj.Spec.SpecOverride == nil { return nil } app := &apiv1.App{} - if err := s.client.Get(ctx, router.Key(newObj.Namespace, newObj.Name), app); err != nil { + if err := v.client.Get(ctx, router.Key(newObj.Namespace, newObj.Name), app); err != nil { result = append(result, field.Invalid(field.NewPath("metadata", "name"), newObj.Name, err.Error())) return } @@ -64,5 +64,5 @@ func (s *Strategy) ValidateUpdate(ctx context.Context, obj, old runtime.Object) newApp.Spec = *newObj.Spec.SpecOverride newApp.Status.DevSession = nil - return s.appValidator.ValidateUpdate(ctx, newApp, oldApp) + return v.appValidator.AllowNestedUpdate().ValidateUpdate(ctx, newApp, oldApp) } diff --git a/pkg/services/services.go b/pkg/services/services.go index 0f0fed5d7..b61bfbf84 100644 --- a/pkg/services/services.go +++ b/pkg/services/services.go @@ -148,6 +148,18 @@ func toRefService(ctx context.Context, c kclient.Client, cfg *apiv1.Config, serv servicePorts = ports.ToServicePorts(targetService.Spec.Ports) } + serviceType := corev1.ServiceTypeExternalName + clusterIP := "" + externalName := fmt.Sprintf("%s.%s.%s", targetService.Name, targetService.Namespace, cfg.InternalClusterDomain) + if service.Name == targetService.Name && + service.Namespace == targetService.Namespace { + // Don't create a circular service. This can happen when we are creating a ServiceInstance that is supposed + // to point to an app that has yet to be created + serviceType = corev1.ServiceTypeClusterIP + clusterIP = "None" + externalName = "" + } + newService := &corev1.Service{ ObjectMeta: metav1.ObjectMeta{ Name: service.Name, @@ -156,8 +168,9 @@ func toRefService(ctx context.Context, c kclient.Client, cfg *apiv1.Config, serv Annotations: service.Spec.Annotations, }, Spec: corev1.ServiceSpec{ - Type: corev1.ServiceTypeExternalName, - ExternalName: fmt.Sprintf("%s.%s.%s", targetService.Name, targetService.Namespace, cfg.InternalClusterDomain), + Type: serviceType, + ClusterIP: clusterIP, + ExternalName: externalName, Ports: servicePorts, }, } diff --git a/pkg/tables/tables.go b/pkg/tables/tables.go index a490e8466..1237ca106 100644 --- a/pkg/tables/tables.go +++ b/pkg/tables/tables.go @@ -162,8 +162,8 @@ var ( RuleRequests = [][]string{ {"Service", "Service"}, - {"Verbs", "Verbs"}, - {"Resource", "Resource"}, + {"Verbs/Actions", "Verbs"}, + {"Resources/API", "Resource"}, {"Scope", "Scope"}, } diff --git a/scripts/acorn-job-helper-init b/scripts/acorn-job-helper-init index f4634788a..aef4c2f35 100755 --- a/scripts/acorn-job-helper-init +++ b/scripts/acorn-job-helper-init @@ -1,3 +1,4 @@ #!/bin/sh mkfifo /tmp/.fifo echo > /tmp/.fifo +sleep .2