From 1fc3f7f154a955dcd11aa0c6f6f3b7c3111750fd Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 20 Jul 2024 12:09:42 +0000 Subject: [PATCH 001/123] Bump the security group with 14 updates (#4776) Bumps the security group with 14 updates: | Package | From | To | | --- | --- | --- | | [github.com/aws/aws-sdk-go](https://github.com/aws/aws-sdk-go) | `1.54.19` | `1.54.20` | | [github.com/bitnami-labs/sealed-secrets](https://github.com/bitnami-labs/sealed-secrets) | `0.27.0` | `0.27.1` | | [github.com/replicatedhq/embedded-cluster-kinds](https://github.com/replicatedhq/embedded-cluster-kinds) | `1.4.5` | `1.4.6` | | [golang.org/x/crypto](https://github.com/golang/crypto) | `0.24.0` | `0.25.0` | | [golang.org/x/oauth2](https://github.com/golang/oauth2) | `0.20.0` | `0.21.0` | | [k8s.io/api](https://github.com/kubernetes/api) | `0.30.2` | `0.30.3` | | [k8s.io/apimachinery](https://github.com/kubernetes/apimachinery) | `0.30.2` | `0.30.3` | | [k8s.io/cli-runtime](https://github.com/kubernetes/cli-runtime) | `0.30.2` | `0.30.3` | | [k8s.io/client-go](https://github.com/kubernetes/client-go) | `0.30.2` | `0.30.3` | | [k8s.io/cluster-bootstrap](https://github.com/kubernetes/cluster-bootstrap) | `0.30.2` | `0.30.3` | | [k8s.io/kubelet](https://github.com/kubernetes/kubelet) | `0.30.2` | `0.30.3` | | [k8s.io/metrics](https://github.com/kubernetes/metrics) | `0.30.2` | `0.30.3` | | [k8s.io/utils](https://github.com/kubernetes/utils) | `0.0.0-20240502163921-fe8a2dddb1d0` | `0.0.0-20240711033017-18e509b52bc8` | | [sigs.k8s.io/kustomize/kyaml](https://github.com/kubernetes-sigs/kustomize) | `0.17.1` | `0.17.2` | Updates `github.com/aws/aws-sdk-go` from 1.54.19 to 1.54.20 - [Release notes](https://github.com/aws/aws-sdk-go/releases) - [Commits](https://github.com/aws/aws-sdk-go/compare/v1.54.19...v1.54.20) Updates `github.com/bitnami-labs/sealed-secrets` from 0.27.0 to 0.27.1 - [Release notes](https://github.com/bitnami-labs/sealed-secrets/releases) - [Changelog](https://github.com/bitnami-labs/sealed-secrets/blob/main/RELEASE-NOTES.md) - [Commits](https://github.com/bitnami-labs/sealed-secrets/compare/v0.27.0...v0.27.1) Updates `github.com/replicatedhq/embedded-cluster-kinds` from 1.4.5 to 1.4.6 - [Commits](https://github.com/replicatedhq/embedded-cluster-kinds/compare/v1.4.5...v1.4.6) Updates `golang.org/x/crypto` from 0.24.0 to 0.25.0 - [Commits](https://github.com/golang/crypto/compare/v0.24.0...v0.25.0) Updates `golang.org/x/oauth2` from 0.20.0 to 0.21.0 - [Commits](https://github.com/golang/oauth2/compare/v0.20.0...v0.21.0) Updates `k8s.io/api` from 0.30.2 to 0.30.3 - [Commits](https://github.com/kubernetes/api/compare/v0.30.2...v0.30.3) Updates `k8s.io/apimachinery` from 0.30.2 to 0.30.3 - [Commits](https://github.com/kubernetes/apimachinery/compare/v0.30.2...v0.30.3) Updates `k8s.io/cli-runtime` from 0.30.2 to 0.30.3 - [Commits](https://github.com/kubernetes/cli-runtime/compare/v0.30.2...v0.30.3) Updates `k8s.io/client-go` from 0.30.2 to 0.30.3 - [Changelog](https://github.com/kubernetes/client-go/blob/master/CHANGELOG.md) - [Commits](https://github.com/kubernetes/client-go/compare/v0.30.2...v0.30.3) Updates `k8s.io/cluster-bootstrap` from 0.30.2 to 0.30.3 - [Commits](https://github.com/kubernetes/cluster-bootstrap/compare/v0.30.2...v0.30.3) Updates `k8s.io/kubelet` from 0.30.2 to 0.30.3 - [Commits](https://github.com/kubernetes/kubelet/compare/v0.30.2...v0.30.3) Updates `k8s.io/metrics` from 0.30.2 to 0.30.3 - [Commits](https://github.com/kubernetes/metrics/compare/v0.30.2...v0.30.3) Updates `k8s.io/utils` from 0.0.0-20240502163921-fe8a2dddb1d0 to 0.0.0-20240711033017-18e509b52bc8 - [Commits](https://github.com/kubernetes/utils/commits) Updates `sigs.k8s.io/kustomize/kyaml` from 0.17.1 to 0.17.2 - [Release notes](https://github.com/kubernetes-sigs/kustomize/releases) - [Commits](https://github.com/kubernetes-sigs/kustomize/compare/api/v0.17.1...api/v0.17.2) --- updated-dependencies: - dependency-name: github.com/aws/aws-sdk-go dependency-type: direct:production update-type: version-update:semver-patch dependency-group: security - dependency-name: github.com/bitnami-labs/sealed-secrets dependency-type: direct:production update-type: version-update:semver-patch dependency-group: security - dependency-name: github.com/replicatedhq/embedded-cluster-kinds dependency-type: direct:production update-type: version-update:semver-patch dependency-group: security - dependency-name: golang.org/x/crypto dependency-type: direct:production update-type: version-update:semver-minor dependency-group: security - dependency-name: golang.org/x/oauth2 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: security - dependency-name: k8s.io/api dependency-type: direct:production update-type: version-update:semver-patch dependency-group: security - dependency-name: k8s.io/apimachinery dependency-type: direct:production update-type: version-update:semver-patch dependency-group: security - dependency-name: k8s.io/cli-runtime dependency-type: direct:production update-type: version-update:semver-patch dependency-group: security - dependency-name: k8s.io/client-go dependency-type: direct:production update-type: version-update:semver-patch dependency-group: security - dependency-name: k8s.io/cluster-bootstrap dependency-type: direct:production update-type: version-update:semver-patch dependency-group: security - dependency-name: k8s.io/kubelet dependency-type: direct:production update-type: version-update:semver-patch dependency-group: security - dependency-name: k8s.io/metrics dependency-type: direct:production update-type: version-update:semver-patch dependency-group: security - dependency-name: k8s.io/utils dependency-type: direct:production update-type: version-update:semver-patch dependency-group: security - dependency-name: sigs.k8s.io/kustomize/kyaml dependency-type: direct:production update-type: version-update:semver-patch dependency-group: security ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- go.mod | 53 ++++++++++++++--------------- go.sum | 106 ++++++++++++++++++++++++++++----------------------------- 2 files changed, 78 insertions(+), 81 deletions(-) diff --git a/go.mod b/go.mod index 0d46fa6b16..9f53a709eb 100644 --- a/go.mod +++ b/go.mod @@ -11,8 +11,8 @@ require ( github.com/Masterminds/semver/v3 v3.2.1 github.com/Masterminds/sprig/v3 v3.2.3 github.com/ahmetalpbalkan/go-cursor v0.0.0-20131010032410-8136607ea412 - github.com/aws/aws-sdk-go v1.54.19 - github.com/bitnami-labs/sealed-secrets v0.27.0 + github.com/aws/aws-sdk-go v1.54.20 + github.com/bitnami-labs/sealed-secrets v0.27.1 github.com/blang/semver v3.5.1+incompatible github.com/containers/image/v5 v5.31.1 github.com/coreos/go-oidc v2.2.1+incompatible @@ -24,7 +24,6 @@ require ( github.com/ghodss/yaml v1.0.0 github.com/go-git/go-git/v5 v5.12.0 github.com/go-logfmt/logfmt v0.6.0 - github.com/gofrs/flock v0.9.0 github.com/golang-jwt/jwt v3.2.2+incompatible github.com/golang/mock v1.6.0 github.com/google/go-github/v39 v39.2.0 @@ -49,7 +48,7 @@ require ( github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5 github.com/pkg/errors v0.9.1 github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 - github.com/replicatedhq/embedded-cluster-kinds v1.4.5 + github.com/replicatedhq/embedded-cluster-kinds v1.4.6 github.com/replicatedhq/kotskinds v0.0.0-20240621084729-1eb1e3eac6f2 github.com/replicatedhq/kurlkinds v1.5.0 github.com/replicatedhq/troubleshoot v0.95.1 @@ -68,8 +67,8 @@ require ( github.com/vmware-tanzu/velero v1.14.0 go.uber.org/multierr v1.11.0 go.uber.org/zap v1.27.0 - golang.org/x/crypto v0.24.0 - golang.org/x/oauth2 v0.20.0 + golang.org/x/crypto v0.25.0 + golang.org/x/oauth2 v0.21.0 golang.org/x/sync v0.7.0 google.golang.org/api v0.175.0 gopkg.in/go-playground/assert.v1 v1.2.1 @@ -77,20 +76,20 @@ require ( gopkg.in/yaml.v2 v2.4.0 gopkg.in/yaml.v3 v3.0.1 helm.sh/helm/v3 v3.15.3 - k8s.io/api v0.30.2 - k8s.io/apimachinery v0.30.2 - k8s.io/cli-runtime v0.30.2 - k8s.io/client-go v0.30.2 - k8s.io/cluster-bootstrap v0.30.2 + k8s.io/api v0.30.3 + k8s.io/apimachinery v0.30.3 + k8s.io/cli-runtime v0.30.3 + k8s.io/client-go v0.30.3 + k8s.io/cluster-bootstrap v0.30.3 k8s.io/helm v2.17.0+incompatible - k8s.io/kubelet v0.30.2 - k8s.io/metrics v0.30.2 - k8s.io/utils v0.0.0-20240502163921-fe8a2dddb1d0 + k8s.io/kubelet v0.30.3 + k8s.io/metrics v0.30.3 + k8s.io/utils v0.0.0-20240711033017-18e509b52bc8 oras.land/oras-go/v2 v2.5.0 sigs.k8s.io/application v0.8.3 sigs.k8s.io/controller-runtime v0.18.4 sigs.k8s.io/kustomize/api v0.16.0 - sigs.k8s.io/kustomize/kyaml v0.17.1 + sigs.k8s.io/kustomize/kyaml v0.17.2 sigs.k8s.io/yaml v1.4.0 ) @@ -169,7 +168,7 @@ require ( github.com/docker/go-metrics v0.0.1 // indirect github.com/docker/libtrust v0.0.0-20160708172513-aabc10ec26b7 // indirect github.com/dsnet/compress v0.0.2-0.20210315054119-f66993602bf5 // indirect - github.com/emicklei/go-restful/v3 v3.12.0 // indirect + github.com/emicklei/go-restful/v3 v3.12.1 // indirect github.com/emirpasic/gods v1.18.1 // indirect github.com/evanphx/json-patch v5.9.0+incompatible // indirect github.com/evanphx/json-patch/v5 v5.9.0 // indirect @@ -233,7 +232,7 @@ require ( github.com/hashicorp/golang-lru/arc/v2 v2.0.5 // indirect github.com/hashicorp/golang-lru/v2 v2.0.5 // indirect github.com/hashicorp/hcl v1.0.0 // indirect - github.com/huandu/xstrings v1.4.0 // indirect + github.com/huandu/xstrings v1.5.0 // indirect github.com/imdario/mergo v0.3.16 // indirect github.com/inconshreveable/mousetrap v1.1.0 // indirect github.com/jackc/chunkreader/v2 v2.0.1 // indirect @@ -302,8 +301,8 @@ require ( github.com/proglottis/gpgme v0.1.3 // indirect github.com/prometheus/client_golang v1.19.1 // indirect github.com/prometheus/client_model v0.6.1 // indirect - github.com/prometheus/common v0.53.0 // indirect - github.com/prometheus/procfs v0.15.0 // indirect + github.com/prometheus/common v0.55.0 // indirect + github.com/prometheus/procfs v0.15.1 // indirect github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 // indirect github.com/redis/go-redis/extra/rediscmd/v9 v9.0.5 // indirect github.com/redis/go-redis/extra/redisotel/v9 v9.0.5 // indirect @@ -367,9 +366,9 @@ require ( go.starlark.net v0.0.0-20230525235612-a134d8f9ddca // indirect golang.org/x/exp v0.0.0-20240506185415-9bf2ced13842 // indirect golang.org/x/mod v0.18.0 // indirect - golang.org/x/net v0.26.0 // indirect - golang.org/x/sys v0.21.0 // indirect - golang.org/x/term v0.21.0 // indirect + golang.org/x/net v0.27.0 // indirect + golang.org/x/sys v0.22.0 // indirect + golang.org/x/term v0.22.0 // indirect golang.org/x/text v0.16.0 // indirect golang.org/x/time v0.5.0 // indirect golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d // indirect @@ -377,17 +376,17 @@ require ( google.golang.org/genproto/googleapis/api v0.0.0-20240318140521-94a12d6c2237 // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20240415180920-8c6c420018be // indirect google.golang.org/grpc v1.64.1 // indirect - google.golang.org/protobuf v1.34.1 // indirect + google.golang.org/protobuf v1.34.2 // indirect gopkg.in/evanphx/json-patch.v5 v5.6.0 // indirect gopkg.in/go-jose/go-jose.v2 v2.6.3 // indirect gopkg.in/inf.v0 v0.9.1 // indirect gopkg.in/square/go-jose.v2 v2.6.0 // indirect gopkg.in/warnings.v0 v0.1.2 // indirect k8s.io/apiextensions-apiserver v0.30.2 // indirect - k8s.io/apiserver v0.30.2 // indirect - k8s.io/component-base v0.30.2 // indirect + k8s.io/apiserver v0.30.3 // indirect + k8s.io/component-base v0.30.3 // indirect k8s.io/klog/v2 v2.130.1 // indirect - k8s.io/kube-openapi v0.0.0-20240521193020-835d969ad83a // indirect + k8s.io/kube-openapi v0.0.0-20240709000822-3c01b740850f // indirect k8s.io/kubectl v0.30.0 // indirect oras.land/oras-go v1.2.5 // indirect periph.io/x/host/v3 v3.8.2 // indirect @@ -407,7 +406,7 @@ require ( github.com/kopia/kopia v0.10.7 // indirect github.com/kubernetes-csi/external-snapshotter/client/v4 v4.2.0 // indirect github.com/moby/docker-image-spec v1.3.1 // indirect - github.com/shopspring/decimal v1.3.1 // indirect + github.com/shopspring/decimal v1.4.0 // indirect github.com/tchap/go-patricia/v2 v2.3.1 // indirect ) diff --git a/go.sum b/go.sum index 5c227fe18b..a75be5df1c 100644 --- a/go.sum +++ b/go.sum @@ -307,8 +307,8 @@ github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2 h1:DklsrG3d github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2/go.mod h1:WaHUgvxTVq04UNunO+XhnAqY/wQc+bxr74GqbsZ/Jqw= github.com/aws/aws-sdk-go v1.34.28/go.mod h1:H7NKnBqNVzoTJpGfLrQkkD+ytBA93eiDYi/+8rV9s48= github.com/aws/aws-sdk-go v1.44.122/go.mod h1:y4AeaBuwd2Lk+GepC1E9v0qOiTws0MIWAX4oIKwKHZo= -github.com/aws/aws-sdk-go v1.54.19 h1:tyWV+07jagrNiCcGRzRhdtVjQs7Vy41NwsuOcl0IbVI= -github.com/aws/aws-sdk-go v1.54.19/go.mod h1:eRwEWoyTWFMVYVQzKMNHWP5/RV4xIUGMQfXQHfHkpNU= +github.com/aws/aws-sdk-go v1.54.20 h1:FZ2UcXya7bUkvkpf7TaPmiL7EubK0go1nlXGLRwEsoo= +github.com/aws/aws-sdk-go v1.54.20/go.mod h1:eRwEWoyTWFMVYVQzKMNHWP5/RV4xIUGMQfXQHfHkpNU= github.com/aws/aws-sdk-go-v2 v1.26.0 h1:/Ce4OCiM3EkpW7Y+xUnfAFpchU78K7/Ug01sZni9PgA= github.com/aws/aws-sdk-go-v2 v1.26.0/go.mod h1:35hUlJVYd+M++iLI3ALmVwMOyRYMmRqUXpTtRGW+K9I= github.com/aws/aws-sdk-go-v2/config v1.27.9 h1:gRx/NwpNEFSk+yQlgmk1bmxxvQ5TyJ76CWXs9XScTqg= @@ -346,8 +346,8 @@ github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d/go.mod h1:6QX/PXZ github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= github.com/bitly/go-hostpool v0.0.0-20171023180738-a3a6125de932 h1:mXoPYz/Ul5HYEDvkta6I8/rnYM5gSdSV2tJ6XbZuEtY= github.com/bitly/go-hostpool v0.0.0-20171023180738-a3a6125de932/go.mod h1:NOuUCSz6Q9T7+igc/hlvDOUdtWKryOrtFyIVABv/p7k= -github.com/bitnami-labs/sealed-secrets v0.27.0 h1:C4eCloMYqXHdKdU7ugz/a8Eap61RBVUAXx/awo3FbAk= -github.com/bitnami-labs/sealed-secrets v0.27.0/go.mod h1:HwDK3XZMyH+pu/gC5AfFOt8bt/YtNgkTKrzbetCH3cc= +github.com/bitnami-labs/sealed-secrets v0.27.1 h1:oSq/rCGYz0pk7RP4RacIorG/VCWA6c4D8wIEpRkZAUg= +github.com/bitnami-labs/sealed-secrets v0.27.1/go.mod h1:nrfN7WgEFtJFLDJUxwHxMHN/FEeeZMXsotk6tC6Bf8g= github.com/blang/semver v3.5.0+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk= github.com/blang/semver v3.5.1+incompatible h1:cQNTCjp13qL8KC3Nbxr/y2Bqb63oX6wdnnjpJbkM4JQ= github.com/blang/semver v3.5.1+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk= @@ -511,8 +511,8 @@ github.com/elazarl/goproxy v0.0.0-20230808193330-2592e75ae04a h1:mATvB/9r/3gvcej github.com/elazarl/goproxy v0.0.0-20230808193330-2592e75ae04a/go.mod h1:Ro8st/ElPeALwNFlcTpWmkr6IoMFfkjXAvTHpevnDsM= github.com/emicklei/go-restful v0.0.0-20170410110728-ff4f55a20633/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs= github.com/emicklei/go-restful v2.9.5+incompatible/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs= -github.com/emicklei/go-restful/v3 v3.12.0 h1:y2DdzBAURM29NFF94q6RaY4vjIH1rtwDapwQtU84iWk= -github.com/emicklei/go-restful/v3 v3.12.0/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc= +github.com/emicklei/go-restful/v3 v3.12.1 h1:PJMDIM/ak7btuL8Ex0iYET9hxM3CI2sjZtzpL63nKAU= +github.com/emicklei/go-restful/v3 v3.12.1/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc= github.com/emirpasic/gods v1.18.1 h1:FXtiHYKDGKCW2KzwZKx0iC0PQmdlorYgdFG9jPXJ1Bc= github.com/emirpasic/gods v1.18.1/go.mod h1:8tpGGwCnJ5H4r6BWwaV6OrWmMoPhUl5jm/FMNAnJvWQ= github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= @@ -685,8 +685,6 @@ github.com/gocql/gocql v1.6.0/go.mod h1:3gM2c4D3AnkISwBxGnMMsS8Oy4y2lhbPRsH4xnJr github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= github.com/godbus/dbus/v5 v5.1.0 h1:4KLkAxT3aOY8Li4FRJe/KvhoNFFxo0m6fNuFUO8QJUk= github.com/godbus/dbus/v5 v5.1.0/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= -github.com/gofrs/flock v0.9.0 h1:QqEH0zKHPdEyY4YbJLleD9Il4ft7h6hn3gECO6Ss4rQ= -github.com/gofrs/flock v0.9.0/go.mod h1:O+L78Axre/Bc0Ya3RlNiGP+Rt0tFHWjtHTQ+B2uPZw8= github.com/gofrs/uuid v4.0.0+incompatible h1:1SD/1F5pU8p29ybwgQSwpQk+mwdRrXCYuPhW6m+TnJw= github.com/gofrs/uuid v4.0.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= @@ -924,8 +922,8 @@ github.com/heroku/docker-registry-client v0.0.0-20190909225348-afc9e1acc3d5 h1:6 github.com/heroku/docker-registry-client v0.0.0-20190909225348-afc9e1acc3d5/go.mod h1:Yho0S7KhsnHQRCC5lDraYF1SsLMeWtf/tKdufKu3TJA= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= github.com/huandu/xstrings v1.3.3/go.mod h1:y5/lhBue+AyNmUVz9RLU9xbLR0o4KIIExikq4ovT0aE= -github.com/huandu/xstrings v1.4.0 h1:D17IlohoQq4UcpqD7fDk80P7l+lwAmlFaBHgOipl2FU= -github.com/huandu/xstrings v1.4.0/go.mod h1:y5/lhBue+AyNmUVz9RLU9xbLR0o4KIIExikq4ovT0aE= +github.com/huandu/xstrings v1.5.0 h1:2ag3IFq9ZDANvthTwTiqSSZLjDc+BedvHPAp5tJy2TI= +github.com/huandu/xstrings v1.5.0/go.mod h1:y5/lhBue+AyNmUVz9RLU9xbLR0o4KIIExikq4ovT0aE= github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/imdario/mergo v0.3.5/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= @@ -1294,14 +1292,14 @@ github.com/prometheus/client_model v0.6.1/go.mod h1:OrxVMOVHjw3lKMa8+x6HeMGkHMQy github.com/prometheus/common v0.0.0-20181126121408-4724e9255275/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= github.com/prometheus/common v0.6.0/go.mod h1:eBmuwkDJBwy6iBfxCBob6t6dR6ENT/y+J+Zk0j9GMYc= -github.com/prometheus/common v0.53.0 h1:U2pL9w9nmJwJDa4qqLQ3ZaePJ6ZTwt7cMD3AG3+aLCE= -github.com/prometheus/common v0.53.0/go.mod h1:BrxBKv3FWBIGXw89Mg1AeBq7FSyRzXWI3l3e7W3RN5U= +github.com/prometheus/common v0.55.0 h1:KEi6DK7lXW/m7Ig5i47x0vRzuBsHuvJdi5ee6Y3G1dc= +github.com/prometheus/common v0.55.0/go.mod h1:2SECS4xJG1kd8XF9IcM1gMX6510RAEL65zxzNImwdc8= github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.0.0-20181204211112-1dc9a6cbc91a/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= github.com/prometheus/procfs v0.0.3/go.mod h1:4A/X28fw3Fc593LaREMrKMqOKvUAntwMDaekg4FpcdQ= -github.com/prometheus/procfs v0.15.0 h1:A82kmvXJq2jTu5YUhSGNlYoxh85zLnKgPz4bMZgI5Ek= -github.com/prometheus/procfs v0.15.0/go.mod h1:Y0RJ/Y5g5wJpkTisOtqwDSo4HwhGmLB4VQSw2sQJLHk= +github.com/prometheus/procfs v0.15.1 h1:YagwOFzUgYfKKHX6Dr+sHT7km/hxC76UB0learggepc= +github.com/prometheus/procfs v0.15.1/go.mod h1:fB45yRUv8NstnjriLhBQLuOUt+WW4BsoGhij/e3PBqk= github.com/quasilyte/go-consistent v0.0.0-20190521200055-c6f3937de18c/go.mod h1:5STLWrekHfjyYwxBRVRXNOSewLJ3PWfDJd1VyTS21fI= github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 h1:N/ElC8H3+5XpJzTSTfLsJV/mx9Q9g7kxmchpfZyxgzM= github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= @@ -1313,8 +1311,8 @@ github.com/redis/go-redis/v9 v9.0.5/go.mod h1:WqMKv5vnQbRuZstUwxQI195wHy+t4PuXDO github.com/redis/go-redis/v9 v9.5.1 h1:H1X4D3yHPaYrkL5X06Wh6xNVM/pX0Ft4RV0vMGvLBh8= github.com/redis/go-redis/v9 v9.5.1/go.mod h1:hdY0cQFCN4fnSYT6TkisLufl/4W5UIXyv0b/CLO2V2M= github.com/remyoudompheng/bigfft v0.0.0-20170806203942-52369c62f446/go.mod h1:uYEyJGbgTkfkS4+E/PavXkNJcbFIpEtjt2B0KDQ5+9M= -github.com/replicatedhq/embedded-cluster-kinds v1.4.5 h1:OZygNoSL4yFF+r+0l2slnq/2aj3Wl6KF1TE2euz8hVI= -github.com/replicatedhq/embedded-cluster-kinds v1.4.5/go.mod h1:AwopUvvGcaWO4mn9DkbPj5RnLuOy756CNLrcaAlmjMo= +github.com/replicatedhq/embedded-cluster-kinds v1.4.6 h1:nP2/ANhUW1omiPp3WFm6tQWkLy9fAA4JPveazg8LlTU= +github.com/replicatedhq/embedded-cluster-kinds v1.4.6/go.mod h1:AwopUvvGcaWO4mn9DkbPj5RnLuOy756CNLrcaAlmjMo= github.com/replicatedhq/kotskinds v0.0.0-20240621084729-1eb1e3eac6f2 h1:xL4u2RHhMaGDgz7Lol5MhVYLnWahV3sCJZbfebpPao0= github.com/replicatedhq/kotskinds v0.0.0-20240621084729-1eb1e3eac6f2/go.mod h1:QjhIUu3+OmHZ09u09j3FCoTt8F3BYtQglS+OLmftu9I= github.com/replicatedhq/kurlkinds v1.5.0 h1:zZ0PKNeh4kXvSzVGkn62DKTo314GxhXg1TSB3azURMc= @@ -1375,8 +1373,8 @@ github.com/shoenig/test v0.6.4 h1:kVTaSd7WLz5WZ2IaoM0RSzRsUD+m8wRR+5qvntpn4LU= github.com/shoenig/test v0.6.4/go.mod h1:byHiCGXqrVaflBLAMq/srcZIHynQPQgeyvkvXnjqq0k= github.com/shopspring/decimal v0.0.0-20180709203117-cd690d0c9e24/go.mod h1:M+9NzErvs504Cn4c5DxATwIqPbtswREoFCre64PpcG4= github.com/shopspring/decimal v1.2.0/go.mod h1:DKyhrW/HYNuLGql+MJL6WCR6knT2jwCFRcu2hWCYk4o= -github.com/shopspring/decimal v1.3.1 h1:2Usl1nmF/WZucqkFZhnfFYxxxu8LG21F6nPQBE5gKV8= -github.com/shopspring/decimal v1.3.1/go.mod h1:DKyhrW/HYNuLGql+MJL6WCR6knT2jwCFRcu2hWCYk4o= +github.com/shopspring/decimal v1.4.0 h1:bxl37RwXBklmTi0C79JfXCEBD1cqqHt0bbgBAGFp81k= +github.com/shopspring/decimal v1.4.0/go.mod h1:gawqmDU56v4yIKSwfBSFip1HdCCXN8/+DMd9qYNcwME= github.com/shurcooL/go v0.0.0-20180423040247-9e1955d9fb6e/go.mod h1:TDJrrUr11Vxrven61rcy3hJMUqaf/CLWYhHNPmT14Lk= github.com/shurcooL/go-goon v0.0.0-20170922171312-37c2f522c041/go.mod h1:N5mDOmsrJOB+vfqUK+7DmDyjhSLIIBnXo9lvZJj3MWQ= github.com/sigstore/fulcio v1.4.5 h1:WWNnrOknD0DbruuZWCbN+86WRROpEl3Xts+WT2Ek1yc= @@ -1630,8 +1628,8 @@ golang.org/x/crypto v0.7.0/go.mod h1:pYwdfH91IfpZVANVyUOhSIPZaFoJGxTFbZhFTx+dXZU golang.org/x/crypto v0.9.0/go.mod h1:yrmDGqONDYtNj3tH8X9dzUun2m2lzPa9ngI6/RUPGR0= golang.org/x/crypto v0.17.0/go.mod h1:gCAAfMLgwOJRpTjQ2zCCt2OcSfYMTeZVSRtQlPC7Nq4= golang.org/x/crypto v0.19.0/go.mod h1:Iy9bg/ha4yyC70EfRS8jz+B6ybOBKMaSxLj6P6oBDfU= -golang.org/x/crypto v0.24.0 h1:mnl8DM0o513X8fdIkmyFE/5hTYxbwYOjDS/+rK6qpRI= -golang.org/x/crypto v0.24.0/go.mod h1:Z1PMYSOR5nyMcyAVAIQSKCDwalqy85Aqn1x3Ws4L5DM= +golang.org/x/crypto v0.25.0 h1:ypSNr+bnYL2YhwoMt2zPxHFmbAN1KZs/njMG3hxUp30= +golang.org/x/crypto v0.25.0/go.mod h1:T+wALwcMOSE0kXgUAnPAHqTLW+XHgcELELW8VaDgm/M= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190125153040-c74c464bbbf2/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= @@ -1745,8 +1743,8 @@ golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= golang.org/x/net v0.7.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= golang.org/x/net v0.8.0/go.mod h1:QVkue5JL9kW//ek3r6jTKnTFis1tRmNAW2P1shuFdJc= golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= -golang.org/x/net v0.26.0 h1:soB7SVo0PWrY4vPW/+ay0jKDNScG2X9wFeYlXIvJsOQ= -golang.org/x/net v0.26.0/go.mod h1:5YKkiSynbBIh3p6iOc/vibscux0x38BZDkn8sCUPxHE= +golang.org/x/net v0.27.0 h1:5K3Njcw06/l2y9vpGCSdcxWOYHOUk3dVNGDXN+FvAys= +golang.org/x/net v0.27.0/go.mod h1:dDi0PyhWNoiUOrAS8uXv/vnScO4wnHQO4mj9fn/RytE= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= @@ -1772,8 +1770,8 @@ golang.org/x/oauth2 v0.0.0-20220822191816-0ebed06d0094/go.mod h1:h4gKUeWbJ4rQPri golang.org/x/oauth2 v0.0.0-20220909003341-f21342109be1/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= golang.org/x/oauth2 v0.0.0-20221014153046-6fdb5e3db783/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= golang.org/x/oauth2 v0.1.0/go.mod h1:G9FE4dLTsbXUu90h/Pf85g4w1D+SSAgR+q46nJZ8M4A= -golang.org/x/oauth2 v0.20.0 h1:4mQdhULixXKP1rwYBW0vAijoXnkTG0BLCDRzfe1idMo= -golang.org/x/oauth2 v0.20.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI= +golang.org/x/oauth2 v0.21.0 h1:tsimM75w1tF/uws5rbeHzIWxEqElMehnc+iW793zsZs= +golang.org/x/oauth2 v0.21.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -1897,8 +1895,8 @@ golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.15.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/sys v0.21.0 h1:rF+pYz3DAGSQAxAu1CbC7catZg4ebC4UIeIhKxBZvws= -golang.org/x/sys v0.21.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.22.0 h1:RI27ohtqKCnwULzJLqkv897zojh5/DwS/ENaMzUOaWI= +golang.org/x/sys v0.22.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= @@ -1910,8 +1908,8 @@ golang.org/x/term v0.6.0/go.mod h1:m6U89DPEgQRMq3DNkDClhWw02AUbt2daBVO4cn4Hv9U= golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo= golang.org/x/term v0.15.0/go.mod h1:BDl952bC7+uMoWR75FIrCDx79TPU9oHkTZ9yRbYOrX0= golang.org/x/term v0.17.0/go.mod h1:lLRBjIVuehSbZlaOtGMbcMncT+aqLLLmKrsjNrUguwk= -golang.org/x/term v0.21.0 h1:WVXCp+/EBEHOj53Rvu+7KiT/iElMrO8ACK16SMZ3jaA= -golang.org/x/term v0.21.0/go.mod h1:ooXLefLobQVslOqselCNF4SxFAaoS6KujMbsGzSDmX0= +golang.org/x/term v0.22.0 h1:BbsgPEJULsl2fV/AT3v15Mjva5yXKQDyKf+TbDz7QJk= +golang.org/x/term v0.22.0/go.mod h1:F3qCibpT5AMpCRfhfT53vVJwhLtIVHhB9XDjfFvnMI4= golang.org/x/text v0.0.0-20160726164857-2910a502d2bf/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.0.0-20170915090833-1cbadb444a80/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -2253,8 +2251,8 @@ 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.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= -google.golang.org/protobuf v1.34.1 h1:9ddQBjfCyZPOHPUiPxpYESBLc+T8P3E+Vo4IbKZgFWg= -google.golang.org/protobuf v1.34.1/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= +google.golang.org/protobuf v1.34.2 h1:6xV6lTsCfpGD21XK49h7MhtcApnLqkfYgPcdHftf6hg= +google.golang.org/protobuf v1.34.2/go.mod h1:qYOHts0dSfpeUzUFpOMr/WGzszTmLH+DiWniOlNbLDw= gopkg.in/airbrake/gobrake.v2 v2.0.9/go.mod h1:/h5ZAUhDkGaJfjzjKLSjv6zCL6O0LLBxU4K+aSYdM/U= gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= @@ -2321,8 +2319,8 @@ honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9 k8s.io/api v0.0.0-20190918155943-95b840bb6a1f/go.mod h1:uWuOHnjmNrtQomJrvEBg0c0HRNyQ+8KTEERVsK0PW48= k8s.io/api v0.17.0/go.mod h1:npsyOePkeP0CPwyGfXDHxvypiYMJxBWAMpQxCaJ4ZxI= k8s.io/api v0.19.0/go.mod h1:I1K45XlvTrDjmj5LoM5LuP/KYrhWbjUKT/SoPG0qTjw= -k8s.io/api v0.30.2 h1:+ZhRj+28QT4UOH+BKznu4CBgPWgkXO7XAvMcMl0qKvI= -k8s.io/api v0.30.2/go.mod h1:ULg5g9JvOev2dG0u2hig4Z7tQ2hHIuS+m8MNZ+X6EmI= +k8s.io/api v0.30.3 h1:ImHwK9DCsPA9uoU3rVh4QHAHHK5dTSv1nxJUapx8hoQ= +k8s.io/api v0.30.3/go.mod h1:GPc8jlzoe5JG3pb0KJCSLX5oAFIW3/qNJITlDj8BH04= k8s.io/apiextensions-apiserver v0.0.0-20190918161926-8f644eb6e783/go.mod h1:xvae1SZB3E17UpV59AWc271W/Ph25N+bjPyR63X6tPY= k8s.io/apiextensions-apiserver v0.17.0/go.mod h1:XiIFUakZywkUl54fVXa7QTEHcqQz9HG55nHd1DCoHj8= k8s.io/apiextensions-apiserver v0.30.2 h1:l7Eue2t6QiLHErfn2vwK4KgF4NeDgjQkCXtEbOocKIE= @@ -2330,28 +2328,28 @@ k8s.io/apiextensions-apiserver v0.30.2/go.mod h1:lsJFLYyK40iguuinsb3nt+Sj6CmodSI k8s.io/apimachinery v0.0.0-20190913080033-27d36303b655/go.mod h1:nL6pwRT8NgfF8TT68DBI8uEePRt89cSvoXUVqbkWHq4= k8s.io/apimachinery v0.17.0/go.mod h1:b9qmWdKlLuU9EBh+06BtLcSf/Mu89rWL33naRxs1uZg= k8s.io/apimachinery v0.19.0/go.mod h1:DnPGDnARWFvYa3pMHgSxtbZb7gpzzAZ1pTfaUNDVlmA= -k8s.io/apimachinery v0.30.2 h1:fEMcnBj6qkzzPGSVsAZtQThU62SmQ4ZymlXRC5yFSCg= -k8s.io/apimachinery v0.30.2/go.mod h1:iexa2somDaxdnj7bha06bhb43Zpa6eWH8N8dbqVjTUc= +k8s.io/apimachinery v0.30.3 h1:q1laaWCmrszyQuSQCfNB8cFgCuDAoPszKY4ucAjDwHc= +k8s.io/apimachinery v0.30.3/go.mod h1:iexa2somDaxdnj7bha06bhb43Zpa6eWH8N8dbqVjTUc= k8s.io/apiserver v0.0.0-20190918160949-bfa5e2e684ad/go.mod h1:XPCXEwhjaFN29a8NldXA901ElnKeKLrLtREO9ZhFyhg= k8s.io/apiserver v0.17.0/go.mod h1:ABM+9x/prjINN6iiffRVNCBR2Wk7uY4z+EtEGZD48cg= -k8s.io/apiserver v0.30.2 h1:ACouHiYl1yFI2VFI3YGM+lvxgy6ir4yK2oLOsLI1/tw= -k8s.io/apiserver v0.30.2/go.mod h1:BOTdFBIch9Sv0ypSEcUR6ew/NUFGocRFNl72Ra7wTm8= -k8s.io/cli-runtime v0.30.2 h1:ooM40eEJusbgHNEqnHziN9ZpLN5U4WcQGsdLKVxpkKE= -k8s.io/cli-runtime v0.30.2/go.mod h1:Y4g/2XezFyTATQUbvV5WaChoUGhojv/jZAtdp5Zkm0A= +k8s.io/apiserver v0.30.3 h1:QZJndA9k2MjFqpnyYv/PH+9PE0SHhx3hBho4X0vE65g= +k8s.io/apiserver v0.30.3/go.mod h1:6Oa88y1CZqnzetd2JdepO0UXzQX4ZnOekx2/PtEjrOg= +k8s.io/cli-runtime v0.30.3 h1:aG69oRzJuP2Q4o8dm+f5WJIX4ZBEwrvdID0+MXyUY6k= +k8s.io/cli-runtime v0.30.3/go.mod h1:hwrrRdd9P84CXSKzhHxrOivAR9BRnkMt0OeP5mj7X30= k8s.io/client-go v0.0.0-20190918160344-1fbdaa4c8d90/go.mod h1:J69/JveO6XESwVgG53q3Uz5OSfgsv4uxpScmmyYOOlk= k8s.io/client-go v0.17.0/go.mod h1:TYgR6EUHs6k45hb6KWjVD6jFZvJV4gHDikv/It0xz+k= k8s.io/client-go v0.19.0/go.mod h1:H9E/VT95blcFQnlyShFgnFT9ZnJOAceiUHM3MlRC+mU= -k8s.io/client-go v0.30.2 h1:sBIVJdojUNPDU/jObC+18tXWcTJVcwyqS9diGdWHk50= -k8s.io/client-go v0.30.2/go.mod h1:JglKSWULm9xlJLx4KCkfLLQ7XwtlbflV6uFFSHTMgVs= -k8s.io/cluster-bootstrap v0.30.2 h1:9PQ5phjWTxmPFKPEzTG6QJzPaUIfuW2RqcHDME5gqPg= -k8s.io/cluster-bootstrap v0.30.2/go.mod h1:dvzAgNVmwRfZ0BzHI/WTvzqlzmNH7w21mdnahEq61KY= +k8s.io/client-go v0.30.3 h1:bHrJu3xQZNXIi8/MoxYtZBBWQQXwy16zqJwloXXfD3k= +k8s.io/client-go v0.30.3/go.mod h1:8d4pf8vYu665/kUbsxWAQ/JDBNWqfFeZnvFiVdmx89U= +k8s.io/cluster-bootstrap v0.30.3 h1:MgxyxMkpaC6mu0BKWJ8985XCOnKU+eH3Iy+biwtDXRk= +k8s.io/cluster-bootstrap v0.30.3/go.mod h1:h8BoLDfdD7XEEIXy7Bx9FcMzxHwz29jsYYi34bM5DKU= k8s.io/code-generator v0.0.0-20190912054826-cd179ad6a269/go.mod h1:V5BD6M4CyaN5m+VthcclXWsVcT1Hu+glwa1bi3MIsyE= k8s.io/code-generator v0.17.0/go.mod h1:DVmfPQgxQENqDIzVR2ddLXMH34qeszkKSdH/N+s+38s= k8s.io/code-generator v0.19.0/go.mod h1:moqLn7w0t9cMs4+5CQyxnfA/HV8MF6aAVENF+WZZhgk= k8s.io/component-base v0.0.0-20190918160511-547f6c5d7090/go.mod h1:933PBGtQFJky3TEwYx4aEPZ4IxqhWh3R6DCmzqIn1hA= k8s.io/component-base v0.17.0/go.mod h1:rKuRAokNMY2nn2A6LP/MiwpoaMRHpfRnrPaUJJj1Yoc= -k8s.io/component-base v0.30.2 h1:pqGBczYoW1sno8q9ObExUqrYSKhtE5rW3y6gX88GZII= -k8s.io/component-base v0.30.2/go.mod h1:yQLkQDrkK8J6NtP+MGJOws+/PPeEXNpwFixsUI7h/OE= +k8s.io/component-base v0.30.3 h1:Ci0UqKWf4oiwy8hr1+E3dsnliKnkMLZMVbWzeorlk7s= +k8s.io/component-base v0.30.3/go.mod h1:C1SshT3rGPCuNtBs14RmVD2xW0EhRSeLvBh7AGk1quA= k8s.io/gengo v0.0.0-20190128074634-0689ccc1d7d6/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= k8s.io/gengo v0.0.0-20190822140433-26a664648505/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= k8s.io/gengo v0.0.0-20200413195148-3a45101e95ac/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= @@ -2369,19 +2367,19 @@ k8s.io/klog/v2 v2.130.1/go.mod h1:3Jpz1GvMt720eyJH1ckRHK1EDfpxISzJ7I9OYgaDtPE= k8s.io/kube-openapi v0.0.0-20190816220812-743ec37842bf/go.mod h1:1TqjTSzOxsLGIKfj0lK8EeCP7K1iUG65v09OM0/WG5E= k8s.io/kube-openapi v0.0.0-20191107075043-30be4d16710a/go.mod h1:1TqjTSzOxsLGIKfj0lK8EeCP7K1iUG65v09OM0/WG5E= k8s.io/kube-openapi v0.0.0-20200805222855-6aeccd4b50c6/go.mod h1:UuqjUnNftUyPE5H64/qeyjQoUZhGpeFDVdxjTeEVN2o= -k8s.io/kube-openapi v0.0.0-20240521193020-835d969ad83a h1:zD1uj3Jf+mD4zmA7W+goE5TxDkI7OGJjBNBzq5fJtLA= -k8s.io/kube-openapi v0.0.0-20240521193020-835d969ad83a/go.mod h1:UxDHUPsUwTOOxSU+oXURfFBcAS6JwiRXTYqYwfuGowc= +k8s.io/kube-openapi v0.0.0-20240709000822-3c01b740850f h1:2sXuKesAYbRHxL3aE2PN6zX/gcJr22cjrsej+W784Tc= +k8s.io/kube-openapi v0.0.0-20240709000822-3c01b740850f/go.mod h1:UxDHUPsUwTOOxSU+oXURfFBcAS6JwiRXTYqYwfuGowc= k8s.io/kubectl v0.30.0 h1:xbPvzagbJ6RNYVMVuiHArC1grrV5vSmmIcSZuCdzRyk= k8s.io/kubectl v0.30.0/go.mod h1:zgolRw2MQXLPwmic2l/+iHs239L49fhSeICuMhQQXTI= -k8s.io/kubelet v0.30.2 h1:Ck4E/pHndI20IzDXxS57dElhDGASPO5pzXF7BcKfmCY= -k8s.io/kubelet v0.30.2/go.mod h1:DSwwTbLQmdNkebAU7ypIALR4P9aXZNFwgRmedojUE94= -k8s.io/metrics v0.30.2 h1:zj4kIPTCfEbY0RHEogpA7QtlItU7xaO11+Gz1zVDxlc= -k8s.io/metrics v0.30.2/go.mod h1:GpoO5XTy/g8CclVLtgA5WTrr2Cy5vCsqr5Xa/0ETWIk= +k8s.io/kubelet v0.30.3 h1:KvGWDdhzD0vEyDyGTCjsDc8D+0+lwRMw3fJbfQgF7ys= +k8s.io/kubelet v0.30.3/go.mod h1:D9or45Vkzcqg55CEiqZ8dVbwP3Ksj7DruEVRS9oq3Ys= +k8s.io/metrics v0.30.3 h1:gKCpte5zykrOmQhZ8qmsxyJslMdiLN+sqbBfIWNpbGM= +k8s.io/metrics v0.30.3/go.mod h1:W06L2nXRhOwPkFYDJYWdEIS3u6JcJy3ebIPYbndRs6A= k8s.io/utils v0.0.0-20190801114015-581e00157fb1/go.mod h1:sZAwmy6armz5eXlNoLmJcl4F1QuKu7sr+mFQ0byX7Ew= k8s.io/utils v0.0.0-20191114184206-e782cd3c129f/go.mod h1:sZAwmy6armz5eXlNoLmJcl4F1QuKu7sr+mFQ0byX7Ew= k8s.io/utils v0.0.0-20200729134348-d5654de09c73/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= -k8s.io/utils v0.0.0-20240502163921-fe8a2dddb1d0 h1:jgGTlFYnhF1PM1Ax/lAlxUPE+KfCIXHaathvJg1C3ak= -k8s.io/utils v0.0.0-20240502163921-fe8a2dddb1d0/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= +k8s.io/utils v0.0.0-20240711033017-18e509b52bc8 h1:pUdcCO1Lk/tbT5ztQWOBi5HBgbBP1J8+AsQnQCKsi8A= +k8s.io/utils v0.0.0-20240711033017-18e509b52bc8/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= modernc.org/cc v1.0.0/go.mod h1:1Sk4//wdnYJiUIxnW8ddKpaOJCF37yAdqYnkxUpaYxw= modernc.org/golex v1.0.0/go.mod h1:b/QX9oBD/LhixY6NDh+IdGv17hgB+51fET1i2kPSmvk= modernc.org/mathutil v1.0.0/go.mod h1:wU0vUrJsVWBZ4P6e7xtFJEhFSNsfRLJ8H458uRjg03k= @@ -2408,8 +2406,8 @@ sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd h1:EDPBXCAspyGV4jQlpZSudPeMm sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0= sigs.k8s.io/kustomize/api v0.16.0 h1:/zAR4FOQDCkgSDmVzV2uiFbuy9bhu3jEzthrHCuvm1g= sigs.k8s.io/kustomize/api v0.16.0/go.mod h1:MnFZ7IP2YqVyVwMWoRxPtgl/5hpA+eCCrQR/866cm5c= -sigs.k8s.io/kustomize/kyaml v0.17.1 h1:TnxYQxFXzbmNG6gOINgGWQt09GghzgTP6mIurOgrLCQ= -sigs.k8s.io/kustomize/kyaml v0.17.1/go.mod h1:9V0mCjIEYjlXuCdYsSXvyoy2BTsLESH7TlGV81S282U= +sigs.k8s.io/kustomize/kyaml v0.17.2 h1:+AzvoJUY0kq4QAhH/ydPHHMRLijtUKiyVyh7fOSshr0= +sigs.k8s.io/kustomize/kyaml v0.17.2/go.mod h1:9V0mCjIEYjlXuCdYsSXvyoy2BTsLESH7TlGV81S282U= sigs.k8s.io/structured-merge-diff v0.0.0-20190525122527-15d366b2352e/go.mod h1:wWxsB5ozmmv/SG7nM11ayaAW51xMvak/t1r0CSlcokI= sigs.k8s.io/structured-merge-diff v0.0.0-20190817042607-6149e4549fca/go.mod h1:IIgPezJWb76P0hotTxzDbWsMYB8APh18qZnxkomBpxA= sigs.k8s.io/structured-merge-diff v1.0.1-0.20191108220359-b1b620dd3f06/go.mod h1:/ULNhyfzRopfcjskuui0cTITekDduZ7ycKN3oUT9R18= From ebfdb229847e2260a1544d1d1003f735157b1af0 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 20 Jul 2024 18:07:03 +0000 Subject: [PATCH 002/123] Bump the security group in /web with 12 updates (#4773) Bumps the security group in /web with 12 updates: | Package | From | To | | --- | --- | --- | | [@emotion/react](https://github.com/emotion-js/emotion) | `11.11.4` | `11.12.0` | | [@emotion/styled](https://github.com/emotion-js/emotion) | `11.11.5` | `11.12.0` | | [@mui/icons-material](https://github.com/mui/material-ui/tree/HEAD/packages/mui-icons-material) | `5.16.1` | `5.16.4` | | [@mui/material](https://github.com/mui/material-ui/tree/HEAD/packages/mui-material) | `5.16.1` | `5.16.4` | | [dayjs](https://github.com/iamkun/dayjs) | `1.11.11` | `1.11.12` | | [react-router-dom](https://github.com/remix-run/react-router/tree/HEAD/packages/react-router-dom) | `6.24.1` | `6.25.1` | | [semver](https://github.com/npm/node-semver) | `7.6.2` | `7.6.3` | | [@babel/core](https://github.com/babel/babel/tree/HEAD/packages/babel-core) | `7.24.8` | `7.24.9` | | [@types/lodash](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/lodash) | `4.17.6` | `4.17.7` | | [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) | `20.14.10` | `20.14.11` | | [eslint-plugin-react](https://github.com/jsx-eslint/eslint-plugin-react) | `7.34.3` | `7.34.4` | | [tailwindcss](https://github.com/tailwindlabs/tailwindcss) | `3.4.4` | `3.4.6` | Updates `@emotion/react` from 11.11.4 to 11.12.0 - [Release notes](https://github.com/emotion-js/emotion/releases) - [Changelog](https://github.com/emotion-js/emotion/blob/main/CHANGELOG.md) - [Commits](https://github.com/emotion-js/emotion/compare/@emotion/react@11.11.4...@emotion/react@11.12.0) Updates `@emotion/styled` from 11.11.5 to 11.12.0 - [Release notes](https://github.com/emotion-js/emotion/releases) - [Changelog](https://github.com/emotion-js/emotion/blob/main/CHANGELOG.md) - [Commits](https://github.com/emotion-js/emotion/compare/@emotion/styled@11.11.5...@emotion/styled@11.12.0) Updates `@mui/icons-material` from 5.16.1 to 5.16.4 - [Release notes](https://github.com/mui/material-ui/releases) - [Changelog](https://github.com/mui/material-ui/blob/v5.16.4/CHANGELOG.md) - [Commits](https://github.com/mui/material-ui/commits/v5.16.4/packages/mui-icons-material) Updates `@mui/material` from 5.16.1 to 5.16.4 - [Release notes](https://github.com/mui/material-ui/releases) - [Changelog](https://github.com/mui/material-ui/blob/v5.16.4/CHANGELOG.md) - [Commits](https://github.com/mui/material-ui/commits/v5.16.4/packages/mui-material) Updates `dayjs` from 1.11.11 to 1.11.12 - [Release notes](https://github.com/iamkun/dayjs/releases) - [Changelog](https://github.com/iamkun/dayjs/blob/dev/CHANGELOG.md) - [Commits](https://github.com/iamkun/dayjs/compare/v1.11.11...v1.11.12) Updates `react-router-dom` from 6.24.1 to 6.25.1 - [Release notes](https://github.com/remix-run/react-router/releases) - [Changelog](https://github.com/remix-run/react-router/blob/main/packages/react-router-dom/CHANGELOG.md) - [Commits](https://github.com/remix-run/react-router/commits/react-router-dom@6.25.1/packages/react-router-dom) Updates `semver` from 7.6.2 to 7.6.3 - [Release notes](https://github.com/npm/node-semver/releases) - [Changelog](https://github.com/npm/node-semver/blob/main/CHANGELOG.md) - [Commits](https://github.com/npm/node-semver/compare/v7.6.2...v7.6.3) Updates `@babel/core` from 7.24.8 to 7.24.9 - [Release notes](https://github.com/babel/babel/releases) - [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md) - [Commits](https://github.com/babel/babel/commits/v7.24.9/packages/babel-core) Updates `@types/lodash` from 4.17.6 to 4.17.7 - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/lodash) Updates `@types/node` from 20.14.10 to 20.14.11 - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node) Updates `eslint-plugin-react` from 7.34.3 to 7.34.4 - [Release notes](https://github.com/jsx-eslint/eslint-plugin-react/releases) - [Changelog](https://github.com/jsx-eslint/eslint-plugin-react/blob/master/CHANGELOG.md) - [Commits](https://github.com/jsx-eslint/eslint-plugin-react/compare/v7.34.3...v7.34.4) Updates `tailwindcss` from 3.4.4 to 3.4.6 - [Release notes](https://github.com/tailwindlabs/tailwindcss/releases) - [Changelog](https://github.com/tailwindlabs/tailwindcss/blob/v3.4.6/CHANGELOG.md) - [Commits](https://github.com/tailwindlabs/tailwindcss/compare/v3.4.4...v3.4.6) --- updated-dependencies: - dependency-name: "@emotion/react" dependency-type: direct:production update-type: version-update:semver-minor dependency-group: security - dependency-name: "@emotion/styled" dependency-type: direct:production update-type: version-update:semver-minor dependency-group: security - dependency-name: "@mui/icons-material" dependency-type: direct:production update-type: version-update:semver-patch dependency-group: security - dependency-name: "@mui/material" dependency-type: direct:production update-type: version-update:semver-patch dependency-group: security - dependency-name: dayjs dependency-type: direct:production update-type: version-update:semver-patch dependency-group: security - dependency-name: react-router-dom dependency-type: direct:production update-type: version-update:semver-minor dependency-group: security - dependency-name: semver dependency-type: direct:production update-type: version-update:semver-patch dependency-group: security - dependency-name: "@babel/core" dependency-type: direct:development update-type: version-update:semver-patch dependency-group: security - dependency-name: "@types/lodash" dependency-type: direct:development update-type: version-update:semver-patch dependency-group: security - dependency-name: "@types/node" dependency-type: direct:development update-type: version-update:semver-patch dependency-group: security - dependency-name: eslint-plugin-react dependency-type: direct:development update-type: version-update:semver-patch dependency-group: security - dependency-name: tailwindcss dependency-type: direct:development update-type: version-update:semver-patch dependency-group: security ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- web/package.json | 24 +-- web/yarn.lock | 406 +++++++++++++++++++++-------------------------- 2 files changed, 193 insertions(+), 237 deletions(-) diff --git a/web/package.json b/web/package.json index 5b2fa90acc..9fbad93c2b 100644 --- a/web/package.json +++ b/web/package.json @@ -23,7 +23,7 @@ "devDependencies": { "@aws-sdk/types": "^3.609.0", "@babel/cli": "^7.24.8", - "@babel/core": "^7.24.8", + "@babel/core": "^7.24.9", "@babel/eslint-parser": "^7.24.8", "@babel/helper-get-function-arity": "^7.16.7", "@babel/plugin-proposal-class-properties": "7.18.6", @@ -52,8 +52,8 @@ "@types/file-saver": "^2.0.7", "@types/jest": "^29.5.12", "@types/js-yaml": "3", - "@types/lodash": "^4.17.6", - "@types/node": "^20.14.10", + "@types/lodash": "^4.17.7", + "@types/node": "^20.14.11", "@types/react": "^18.3.3", "@types/react-dom": "^18.3.0", "@types/react-helmet": "^6.1.11", @@ -89,7 +89,7 @@ "eslint-plugin-node": "11.1.0", "eslint-plugin-prettier": "^4.2.1", "eslint-plugin-promise": "4.2.1", - "eslint-plugin-react": "^7.34.3", + "eslint-plugin-react": "^7.34.4", "eslint-plugin-react-hooks": "^4.6.2", "eslint-plugin-standard": "5.0.0", "eslint-webpack-plugin": "^4.2.0", @@ -107,7 +107,7 @@ "source-map-loader": "^0.2.4", "stream-browserify": "^3.0.0", "style-loader": "^3.3.4", - "tailwindcss": "^3.4.4", + "tailwindcss": "^3.4.6", "terser-webpack-plugin": "^5.3.10", "ts-loader": "^9.5.1", "tty-browserify": "^0.0.1", @@ -121,13 +121,13 @@ "webpack-merge": "5.10.0" }, "dependencies": { - "@emotion/react": "^11.11.4", - "@emotion/styled": "^11.11.5", + "@emotion/react": "^11.12.0", + "@emotion/styled": "^11.12.0", "@grafana/data": "^8.5.16", "@maji/react-prism": "^1.0.1", "@monaco-editor/react": "^4.6.0", - "@mui/icons-material": "^5.16.1", - "@mui/material": "^5.16.1", + "@mui/icons-material": "^5.16.4", + "@mui/material": "^5.16.4", "@storybook/addon-storysource": "^7.6.17", "@tanstack/react-query": "^4.36.1", "@tanstack/react-query-devtools": "^4.36.1", @@ -138,7 +138,7 @@ "classnames": "^2.5.1", "clipboard": "2.0.11", "cronstrue": "^2.50.0", - "dayjs": "1.11.11", + "dayjs": "1.11.12", "diff": "^4.0.2", "downloadjs": "^1.4.7", "file-loader": "^6.2.0", @@ -168,12 +168,12 @@ "react-refresh": "^0.14.2", "react-remarkable": "^1.1.3", "react-router": "^5.1", - "react-router-dom": "^6.24.1", + "react-router-dom": "^6.25.1", "react-select": "^2.4.3", "react-tooltip": "4.2.6", "react-vis": "^1.12.1", "resumablejs": "^1.1.0", - "semver": "^7.6.2", + "semver": "^7.6.3", "styled-components": "^5.3.5", "tar-stream": "3.1.7", "universal-cookie": "^7.1.4" diff --git a/web/yarn.lock b/web/yarn.lock index ba55fdb772..0eb98b1551 100644 --- a/web/yarn.lock +++ b/web/yarn.lock @@ -84,21 +84,21 @@ semver "^5.4.1" source-map "^0.5.0" -"@babel/core@^7.1.0", "@babel/core@^7.11.6", "@babel/core@^7.12.10", "@babel/core@^7.12.3", "@babel/core@^7.23.2", "@babel/core@^7.23.9", "@babel/core@^7.24.8", "@babel/core@^7.7.5": - version "7.24.8" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.24.8.tgz#c24f83985214f599cee5fc26d393d9ab320342f4" - integrity sha512-6AWcmZC/MZCO0yKys4uhg5NlxL0ESF3K6IAaoQ+xSXvPyPyxNWRafP+GDbI88Oh68O7QkJgmEtedWPM9U0pZNg== +"@babel/core@^7.1.0", "@babel/core@^7.11.6", "@babel/core@^7.12.10", "@babel/core@^7.12.3", "@babel/core@^7.23.2", "@babel/core@^7.23.9", "@babel/core@^7.24.9", "@babel/core@^7.7.5": + version "7.24.9" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.24.9.tgz#dc07c9d307162c97fa9484ea997ade65841c7c82" + integrity sha512-5e3FI4Q3M3Pbr21+5xJwCv6ZT6KmGkI0vw3Tozy5ODAQFTIWe37iT8Cr7Ice2Ntb+M3iSKCEWMB1MBgKrW3whg== dependencies: "@ampproject/remapping" "^2.2.0" "@babel/code-frame" "^7.24.7" - "@babel/generator" "^7.24.8" + "@babel/generator" "^7.24.9" "@babel/helper-compilation-targets" "^7.24.8" - "@babel/helper-module-transforms" "^7.24.8" + "@babel/helper-module-transforms" "^7.24.9" "@babel/helpers" "^7.24.8" "@babel/parser" "^7.24.8" "@babel/template" "^7.24.7" "@babel/traverse" "^7.24.8" - "@babel/types" "^7.24.8" + "@babel/types" "^7.24.9" convert-source-map "^2.0.0" debug "^4.1.0" gensync "^1.0.0-beta.2" @@ -114,12 +114,12 @@ eslint-visitor-keys "^2.1.0" semver "^6.3.1" -"@babel/generator@^7.12.11", "@babel/generator@^7.12.5", "@babel/generator@^7.24.8", "@babel/generator@^7.7.2": - version "7.24.8" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.24.8.tgz#1802d6ac4d77a9199c75ae3eb6a08336e5d1d39a" - integrity sha512-47DG+6F5SzOi0uEvK4wMShmn5yY0mVjVJoWTphdY2B4Rx9wHgjK7Yhtr0ru6nE+sn0v38mzrWOlah0p/YlHHOQ== +"@babel/generator@^7.12.11", "@babel/generator@^7.12.5", "@babel/generator@^7.24.8", "@babel/generator@^7.24.9", "@babel/generator@^7.7.2": + version "7.24.10" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.24.10.tgz#a4ab681ec2a78bbb9ba22a3941195e28a81d8e76" + integrity sha512-o9HBZL1G2129luEUlG1hB4N/nlYNWHnpwlND9eOMclRqqu1YDy2sSYVCFUZwl8I1Gxh+QSRrP2vD7EpUmFVXxg== dependencies: - "@babel/types" "^7.24.8" + "@babel/types" "^7.24.9" "@jridgewell/gen-mapping" "^0.3.5" "@jridgewell/trace-mapping" "^0.3.25" jsesc "^2.5.1" @@ -280,10 +280,10 @@ "@babel/traverse" "^7.24.7" "@babel/types" "^7.24.7" -"@babel/helper-module-transforms@^7.12.1", "@babel/helper-module-transforms@^7.24.7", "@babel/helper-module-transforms@^7.24.8": - version "7.24.8" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.24.8.tgz#b1f2df4f96f3465b0d035b697ec86cb51ff348fe" - integrity sha512-m4vWKVqvkVAWLXfHCCfff2luJj86U+J0/x+0N3ArG/tP0Fq7zky2dYwMbtPmkc/oulkkbjdL3uWzuoBwQ8R00Q== +"@babel/helper-module-transforms@^7.12.1", "@babel/helper-module-transforms@^7.24.7", "@babel/helper-module-transforms@^7.24.8", "@babel/helper-module-transforms@^7.24.9": + version "7.24.9" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.24.9.tgz#e13d26306b89eea569180868e652e7f514de9d29" + integrity sha512-oYbh+rtFKj/HwBQkFlUzvcybzklmVdVV3UU+mN7n2t/q3yGHbuVdNxyFvSBO1tfvjyArpHNcWMAzsSPdyI46hw== dependencies: "@babel/helper-environment-visitor" "^7.24.7" "@babel/helper-module-imports" "^7.24.7" @@ -1326,10 +1326,10 @@ debug "^4.3.1" globals "^11.1.0" -"@babel/types@^7.0.0", "@babel/types@^7.12.11", "@babel/types@^7.12.7", "@babel/types@^7.16.7", "@babel/types@^7.18.6", "@babel/types@^7.2.0", "@babel/types@^7.20.7", "@babel/types@^7.22.15", "@babel/types@^7.22.5", "@babel/types@^7.24.7", "@babel/types@^7.24.8", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4": - version "7.24.8" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.24.8.tgz#d51ffa9043b17d36622efa44e861a49e69e130a8" - integrity sha512-SkSBEHwwJRU52QEVZBmMBnE5Ux2/6WU1grdYyOhpbCNxbmJrDuDCphBzKZSO3taf0zztp+qkWlymE5tVL5l0TA== +"@babel/types@^7.0.0", "@babel/types@^7.12.11", "@babel/types@^7.12.7", "@babel/types@^7.16.7", "@babel/types@^7.18.6", "@babel/types@^7.2.0", "@babel/types@^7.20.7", "@babel/types@^7.22.15", "@babel/types@^7.22.5", "@babel/types@^7.24.7", "@babel/types@^7.24.8", "@babel/types@^7.24.9", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4": + version "7.24.9" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.24.9.tgz#228ce953d7b0d16646e755acf204f4cf3d08cc73" + integrity sha512-xm8XrMKz0IlUdocVbYJe0Z9xEgidU7msskG8BbhnTPK/HZ2z/7FP7ykqPgrUH+C+r414mNfNWam1f2vqOjqjYQ== dependencies: "@babel/helper-string-parser" "^7.24.8" "@babel/helper-validator-identifier" "^7.24.7" @@ -1368,16 +1368,16 @@ resolved "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz" integrity sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw== -"@emotion/babel-plugin@^11.11.0": - version "11.11.0" - resolved "https://registry.yarnpkg.com/@emotion/babel-plugin/-/babel-plugin-11.11.0.tgz#c2d872b6a7767a9d176d007f5b31f7d504bb5d6c" - integrity sha512-m4HEDZleaaCH+XgDDsPF15Ht6wTLsgDTeR3WYj9Q/k76JtWhrJjcP4+/XlG8LGT/Rol9qUfOIztXeA84ATpqPQ== +"@emotion/babel-plugin@^11.12.0": + version "11.12.0" + resolved "https://registry.yarnpkg.com/@emotion/babel-plugin/-/babel-plugin-11.12.0.tgz#7b43debb250c313101b3f885eba634f1d723fcc2" + integrity sha512-y2WQb+oP8Jqvvclh8Q55gLUyb7UFvgv7eJfsj7td5TToBrIUtPay2kMrZi4xjq9qw2vD0ZR5fSho0yqoFgX7Rw== dependencies: "@babel/helper-module-imports" "^7.16.7" "@babel/runtime" "^7.18.3" - "@emotion/hash" "^0.9.1" - "@emotion/memoize" "^0.8.1" - "@emotion/serialize" "^1.1.2" + "@emotion/hash" "^0.9.2" + "@emotion/memoize" "^0.9.0" + "@emotion/serialize" "^1.2.0" babel-plugin-macros "^3.1.0" convert-source-map "^1.5.0" escape-string-regexp "^4.0.0" @@ -1397,15 +1397,15 @@ find-root "^1.1.0" source-map "^0.7.2" -"@emotion/cache@^11.11.0": - version "11.11.0" - resolved "https://registry.yarnpkg.com/@emotion/cache/-/cache-11.11.0.tgz#809b33ee6b1cb1a625fef7a45bc568ccd9b8f3ff" - integrity sha512-P34z9ssTCBi3e9EI1ZsWpNHcfY1r09ZO0rZbRO2ob3ZQMnFI35jB536qoXbkdesr5EUhYi22anuEJuyxifaqAQ== +"@emotion/cache@^11.11.0", "@emotion/cache@^11.12.0": + version "11.12.0" + resolved "https://registry.yarnpkg.com/@emotion/cache/-/cache-11.12.0.tgz#ae8c735690fdc8f410f3ea849dd7d3ea4c017494" + integrity sha512-VFo/F1PthkxHwWDCcXkidyXw70eAkdiNiCzthMI2rRQjFiTvmXt8UDlv/VE1DTsd4CIEY2wQf5AnL2QiPgphlw== dependencies: - "@emotion/memoize" "^0.8.1" - "@emotion/sheet" "^1.2.2" - "@emotion/utils" "^1.2.1" - "@emotion/weak-memoize" "^0.3.1" + "@emotion/memoize" "^0.9.0" + "@emotion/sheet" "^1.3.0" + "@emotion/utils" "^1.3.0" + "@emotion/weak-memoize" "^0.4.0" stylis "4.2.0" "@emotion/hash@^0.6.2", "@emotion/hash@^0.6.6": @@ -1413,40 +1413,40 @@ resolved "https://registry.npmjs.org/@emotion/hash/-/hash-0.6.6.tgz" integrity sha512-ojhgxzUHZ7am3D2jHkMzPpsBAiB005GF5YU4ea+8DNPybMk01JJUM9V9YRlF/GE95tcOm8DxQvWA2jq19bGalQ== -"@emotion/hash@^0.9.1": - version "0.9.1" - resolved "https://registry.yarnpkg.com/@emotion/hash/-/hash-0.9.1.tgz#4ffb0055f7ef676ebc3a5a91fb621393294e2f43" - integrity sha512-gJB6HLm5rYwSLI6PQa+X1t5CFGrv1J1TWG+sOyMCeKz2ojaj6Fnl/rZEspogG+cvqbt4AE/2eIyD2QfLKTBNlQ== +"@emotion/hash@^0.9.2": + version "0.9.2" + resolved "https://registry.yarnpkg.com/@emotion/hash/-/hash-0.9.2.tgz#ff9221b9f58b4dfe61e619a7788734bd63f6898b" + integrity sha512-MyqliTZGuOm3+5ZRSaaBGP3USLw6+EGykkwZns2EPC5g8jJ4z9OrdZY9apkl3+UP9+sdz76YYkwCKP5gh8iY3g== -"@emotion/is-prop-valid@^1.1.0", "@emotion/is-prop-valid@^1.2.2": - version "1.2.2" - resolved "https://registry.yarnpkg.com/@emotion/is-prop-valid/-/is-prop-valid-1.2.2.tgz#d4175076679c6a26faa92b03bb786f9e52612337" - integrity sha512-uNsoYd37AFmaCdXlg6EYD1KaPOaRWRByMCYzbKUX4+hhMfrxdVSelShywL4JVaAeM/eHUOSprYBQls+/neX3pw== +"@emotion/is-prop-valid@^1.1.0", "@emotion/is-prop-valid@^1.3.0": + version "1.3.0" + resolved "https://registry.yarnpkg.com/@emotion/is-prop-valid/-/is-prop-valid-1.3.0.tgz#bd84ba972195e8a2d42462387581560ef780e4e2" + integrity sha512-SHetuSLvJDzuNbOdtPVbq6yMMMlLoW5Q94uDqJZqy50gcmAjxFkVqmzqSGEFq9gT2iMuIeKV1PXVWmvUhuZLlQ== dependencies: - "@emotion/memoize" "^0.8.1" + "@emotion/memoize" "^0.9.0" "@emotion/memoize@^0.6.1", "@emotion/memoize@^0.6.6": version "0.6.6" resolved "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.6.6.tgz" integrity sha512-h4t4jFjtm1YV7UirAFuSuFGyLa+NNxjdkq6DpFLANNQY5rHueFZHVY+8Cu1HYVP6DrheB0kv4m5xPjo7eKT7yQ== -"@emotion/memoize@^0.8.1": - version "0.8.1" - resolved "https://registry.yarnpkg.com/@emotion/memoize/-/memoize-0.8.1.tgz#c1ddb040429c6d21d38cc945fe75c818cfb68e17" - integrity sha512-W2P2c/VRW1/1tLox0mVUalvnWXxavmv/Oum2aPsRcoDJuob75FC3Y8FbpfLwUegRcxINtGUMPq0tFCvYNTBXNA== +"@emotion/memoize@^0.9.0": + version "0.9.0" + resolved "https://registry.yarnpkg.com/@emotion/memoize/-/memoize-0.9.0.tgz#745969d649977776b43fc7648c556aaa462b4102" + integrity sha512-30FAj7/EoJ5mwVPOWhAyCX+FPfMDrVecJAM+Iw9NRoSl4BBAQeqj4cApHHUXOVvIPgLVDsCFoz/hGD+5QQD1GQ== -"@emotion/react@^11.11.4": - version "11.11.4" - resolved "https://registry.yarnpkg.com/@emotion/react/-/react-11.11.4.tgz#3a829cac25c1f00e126408fab7f891f00ecc3c1d" - integrity sha512-t8AjMlF0gHpvvxk5mAtCqR4vmxiGHCeJBaQO6gncUSdklELOgtwjerNY2yuJNfwnc6vi16U/+uMF+afIawJ9iw== +"@emotion/react@^11.12.0": + version "11.12.0" + resolved "https://registry.yarnpkg.com/@emotion/react/-/react-11.12.0.tgz#b9605522156d3cc917c1dfc3a09540f8620c9166" + integrity sha512-kTktYMpG8mHjLi8u6XOTMfDmQvUve/un2ZVj4khcU2KTn17ElMV8BK6QFzT8V/v2QW8013rf07Yc0ayQL3tp3w== dependencies: "@babel/runtime" "^7.18.3" - "@emotion/babel-plugin" "^11.11.0" - "@emotion/cache" "^11.11.0" - "@emotion/serialize" "^1.1.3" + "@emotion/babel-plugin" "^11.12.0" + "@emotion/cache" "^11.12.0" + "@emotion/serialize" "^1.2.0" "@emotion/use-insertion-effect-with-fallbacks" "^1.0.1" - "@emotion/utils" "^1.2.1" - "@emotion/weak-memoize" "^0.3.1" + "@emotion/utils" "^1.3.0" + "@emotion/weak-memoize" "^0.4.0" hoist-non-react-statics "^3.3.1" "@emotion/serialize@^0.9.1": @@ -1459,33 +1459,33 @@ "@emotion/unitless" "^0.6.7" "@emotion/utils" "^0.8.2" -"@emotion/serialize@^1.1.2", "@emotion/serialize@^1.1.3", "@emotion/serialize@^1.1.4": - version "1.1.4" - resolved "https://registry.yarnpkg.com/@emotion/serialize/-/serialize-1.1.4.tgz#fc8f6d80c492cfa08801d544a05331d1cc7cd451" - integrity sha512-RIN04MBT8g+FnDwgvIUi8czvr1LU1alUMI05LekWB5DGyTm8cCBMCRpq3GqaiyEDRptEXOyXnvZ58GZYu4kBxQ== +"@emotion/serialize@^1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@emotion/serialize/-/serialize-1.2.0.tgz#4fed8629e566676275302844f111219445cabd08" + integrity sha512-X5UWpZAhGGp5LOn7OAI9k9JjRtz7nSFhZypatADcuEd/0bECZ0DzVjPdL8hljTrAku8+TjFvWIYHMOCO/0v/Ng== dependencies: - "@emotion/hash" "^0.9.1" - "@emotion/memoize" "^0.8.1" - "@emotion/unitless" "^0.8.1" - "@emotion/utils" "^1.2.1" + "@emotion/hash" "^0.9.2" + "@emotion/memoize" "^0.9.0" + "@emotion/unitless" "^0.9.0" + "@emotion/utils" "^1.3.0" csstype "^3.0.2" -"@emotion/sheet@^1.2.2": - version "1.2.2" - resolved "https://registry.yarnpkg.com/@emotion/sheet/-/sheet-1.2.2.tgz#d58e788ee27267a14342303e1abb3d508b6d0fec" - integrity sha512-0QBtGvaqtWi+nx6doRwDdBIzhNdZrXUppvTM4dtZZWEGTXL/XE/yJxLMGlDT1Gt+UHH5IX1n+jkXyytE/av7OA== +"@emotion/sheet@^1.3.0": + version "1.3.0" + resolved "https://registry.yarnpkg.com/@emotion/sheet/-/sheet-1.3.0.tgz#b1bd1d25f5590989187470f0bbc9b962f50fc72f" + integrity sha512-vOPwbKw8fj/oSEa7CWqiKCvLZ1AeLIAApmboGP34xUyUjXalFyf+tMtgMDqP7VMevLPhUa+YWJS46cQUA+tr9A== -"@emotion/styled@^11.11.5": - version "11.11.5" - resolved "https://registry.yarnpkg.com/@emotion/styled/-/styled-11.11.5.tgz#0c5c8febef9d86e8a926e663b2e5488705545dfb" - integrity sha512-/ZjjnaNKvuMPxcIiUkf/9SHoG4Q196DRl1w82hQ3WCsjo1IUR8uaGWrC6a87CrYAW0Kb/pK7hk8BnLgLRi9KoQ== +"@emotion/styled@^11.12.0": + version "11.12.0" + resolved "https://registry.yarnpkg.com/@emotion/styled/-/styled-11.12.0.tgz#829556b08ff63e7e9a46fb661913f590031f1749" + integrity sha512-2l60kuKm8OKbyFYlVutpwFGoeIoftJAHX4udQwpaO4HNoGyvxFLXiEU56/UGCyrwxr76C93eOdVnGewZeC7AEw== dependencies: "@babel/runtime" "^7.18.3" - "@emotion/babel-plugin" "^11.11.0" - "@emotion/is-prop-valid" "^1.2.2" - "@emotion/serialize" "^1.1.4" + "@emotion/babel-plugin" "^11.12.0" + "@emotion/is-prop-valid" "^1.3.0" + "@emotion/serialize" "^1.2.0" "@emotion/use-insertion-effect-with-fallbacks" "^1.0.1" - "@emotion/utils" "^1.2.1" + "@emotion/utils" "^1.3.0" "@emotion/stylis@^0.7.0": version "0.7.1" @@ -1507,10 +1507,10 @@ resolved "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.7.5.tgz" integrity sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg== -"@emotion/unitless@^0.8.1": - version "0.8.1" - resolved "https://registry.yarnpkg.com/@emotion/unitless/-/unitless-0.8.1.tgz#182b5a4704ef8ad91bde93f7a860a88fd92c79a3" - integrity sha512-KOEGMu6dmJZtpadb476IsZBclKvILjopjUii3V+7MnXIQCYh8W3NgNcgwo21n9LXZX6EDIKvqfjYxXebDwxKmQ== +"@emotion/unitless@^0.9.0": + version "0.9.0" + resolved "https://registry.yarnpkg.com/@emotion/unitless/-/unitless-0.9.0.tgz#8e5548f072bd67b8271877e51c0f95c76a66cbe2" + integrity sha512-TP6GgNZtmtFaFcsOgExdnfxLLpRDla4Q66tnenA9CktvVSdNKDvMVuUah4QvWPIpNjrWsGg3qeGo9a43QooGZQ== "@emotion/use-insertion-effect-with-fallbacks@^1.0.1": version "1.0.1" @@ -1522,15 +1522,15 @@ resolved "https://registry.npmjs.org/@emotion/utils/-/utils-0.8.2.tgz" integrity sha512-rLu3wcBWH4P5q1CGoSSH/i9hrXs7SlbRLkoq9IGuoPYNGQvDJ3pt/wmOM+XgYjIDRMVIdkUWt0RsfzF50JfnCw== -"@emotion/utils@^1.2.1": - version "1.2.1" - resolved "https://registry.yarnpkg.com/@emotion/utils/-/utils-1.2.1.tgz#bbab58465738d31ae4cb3dbb6fc00a5991f755e4" - integrity sha512-Y2tGf3I+XVnajdItskUCn6LX+VUDmP6lTL4fcqsXAv43dnlbZiuW4MWQW38rW/BVWSE7Q/7+XQocmpnRYILUmg== +"@emotion/utils@^1.3.0": + version "1.3.0" + resolved "https://registry.yarnpkg.com/@emotion/utils/-/utils-1.3.0.tgz#e170d859bdf5da2a705b3c83233ebe35fb7a50da" + integrity sha512-+M7u4EaX5t4bCunKTltAdGis3NFHQniikLVEQ+rPQccsX/xV4v5Etwg12paioZ9DsO+CTvimtmnjZbW85kbF8Q== -"@emotion/weak-memoize@^0.3.1": - version "0.3.1" - resolved "https://registry.yarnpkg.com/@emotion/weak-memoize/-/weak-memoize-0.3.1.tgz#d0fce5d07b0620caa282b5131c297bb60f9d87e6" - integrity sha512-EsBwpc7hBUJWAsNPBmJy4hxWx12v6bshQsldrVmjxJoc3isbxhOrF2IcCpaXxfvq03NwkI7sbsOLXbYuqF/8Ww== +"@emotion/weak-memoize@^0.4.0": + version "0.4.0" + resolved "https://registry.yarnpkg.com/@emotion/weak-memoize/-/weak-memoize-0.4.0.tgz#5e13fac887f08c44f76b0ccaf3370eb00fec9bb6" + integrity sha512-snKqtPW01tN0ui7yu9rGv69aJXr/a/Ywvl11sUjNtEcRc+ng/mQriFL0wLXMef74iHa/EkftbDzU9F8iFbH+zg== "@esbuild/android-arm64@0.18.20": version "0.18.20" @@ -1674,33 +1674,6 @@ resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.57.0.tgz#a5417ae8427873f1dd08b70b3574b453e67b5f7f" integrity sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g== -"@floating-ui/core@^1.0.0": - version "1.6.0" - resolved "https://registry.yarnpkg.com/@floating-ui/core/-/core-1.6.0.tgz#fa41b87812a16bf123122bf945946bae3fdf7fc1" - integrity sha512-PcF++MykgmTj3CIyOQbKA/hDzOAiqI3mhuoN44WRCopIs1sgoDoU4oty4Jtqaj/y3oDU6fnVSm4QG0a3t5i0+g== - dependencies: - "@floating-ui/utils" "^0.2.1" - -"@floating-ui/dom@^1.6.1": - version "1.6.3" - resolved "https://registry.yarnpkg.com/@floating-ui/dom/-/dom-1.6.3.tgz#954e46c1dd3ad48e49db9ada7218b0985cee75ef" - integrity sha512-RnDthu3mzPlQ31Ss/BTwQ1zjzIhr3lk1gZB1OC56h/1vEtaXkESrOqL5fQVMfXpwGtRwX+YsZBdyHtJMQnkArw== - dependencies: - "@floating-ui/core" "^1.0.0" - "@floating-ui/utils" "^0.2.0" - -"@floating-ui/react-dom@^2.0.8": - version "2.0.8" - resolved "https://registry.yarnpkg.com/@floating-ui/react-dom/-/react-dom-2.0.8.tgz#afc24f9756d1b433e1fe0d047c24bd4d9cefaa5d" - integrity sha512-HOdqOt3R3OGeTKidaLvJKcgg75S6tibQ3Tif4eyd91QnIJWr0NLvoXFpJA/j8HqkFSL68GDca9AuyWEHlhyClw== - dependencies: - "@floating-ui/dom" "^1.6.1" - -"@floating-ui/utils@^0.2.0", "@floating-ui/utils@^0.2.1": - version "0.2.1" - resolved "https://registry.yarnpkg.com/@floating-ui/utils/-/utils-0.2.1.tgz#16308cea045f0fc777b6ff20a9f25474dd8293d2" - integrity sha512-9TANp6GPoMtYzQdt54kfAyMmz1+osLlXdg2ENroU7zzrtflTLrrC/lgrIfaSe+Wu0b89GKccT7vxXA0MoAIO+Q== - "@gar/promisify@^1.0.1": version "1.1.3" resolved "https://registry.yarnpkg.com/@gar/promisify/-/promisify-1.1.3.tgz#555193ab2e3bb3b6adc3d551c9c030d9e860daf6" @@ -2186,42 +2159,29 @@ call-me-maybe "^1.0.1" glob-to-regexp "^0.3.0" -"@mui/base@5.0.0-beta.40": - version "5.0.0-beta.40" - resolved "https://registry.yarnpkg.com/@mui/base/-/base-5.0.0-beta.40.tgz#1f8a782f1fbf3f84a961e954c8176b187de3dae2" - integrity sha512-I/lGHztkCzvwlXpjD2+SNmvNQvB4227xBXhISPjEaJUXGImOQ9f3D2Yj/T3KasSI/h0MLWy74X0J6clhPmsRbQ== - dependencies: - "@babel/runtime" "^7.23.9" - "@floating-ui/react-dom" "^2.0.8" - "@mui/types" "^7.2.14" - "@mui/utils" "^5.15.14" - "@popperjs/core" "^2.11.8" - clsx "^2.1.0" - prop-types "^15.8.1" - -"@mui/core-downloads-tracker@^5.16.1": - version "5.16.1" - resolved "https://registry.yarnpkg.com/@mui/core-downloads-tracker/-/core-downloads-tracker-5.16.1.tgz#36fabd4f789f87300accf6fedd4a57c88f01d3c8" - integrity sha512-62Jq7ACYi/55Kjkh/nVfEL3F3ytTYTsdB8MGJ9iI+eRQv+Aoem5CPUAzQihUo25qqh1VkVu9/jQn3dFbyrXHgw== +"@mui/core-downloads-tracker@^5.16.4": + version "5.16.4" + resolved "https://registry.yarnpkg.com/@mui/core-downloads-tracker/-/core-downloads-tracker-5.16.4.tgz#a34de72acd7e81fdbcc7eeb07786205e90dda148" + integrity sha512-rNdHXhclwjEZnK+//3SR43YRx0VtjdHnUFhMSGYmAMJve+KiwEja/41EYh8V3pZKqF2geKyfcFUenTfDTYUR4w== -"@mui/icons-material@^5.16.1": - version "5.16.1" - resolved "https://registry.yarnpkg.com/@mui/icons-material/-/icons-material-5.16.1.tgz#abb72fa73d508a50a1b2e0b15cb5e4f89ef31ff9" - integrity sha512-ogQPweYba4+5XZykilwxn2/oS78uwoQ0BVBpOhhCJo0ooZsqTTsalhzP2qD/RdGqMQ8xyXPz1sYM2djTruVVVA== +"@mui/icons-material@^5.16.4": + version "5.16.4" + resolved "https://registry.yarnpkg.com/@mui/icons-material/-/icons-material-5.16.4.tgz#8c7e228c1e178992d89fab47e057222c8209bd7b" + integrity sha512-j9/CWctv6TH6Dou2uR2EH7UOgu79CW/YcozxCYVLJ7l03pCsiOlJ5sBArnWJxJ+nGkFwyL/1d1k8JEPMDR125A== dependencies: "@babel/runtime" "^7.23.9" -"@mui/material@^5.16.1": - version "5.16.1" - resolved "https://registry.yarnpkg.com/@mui/material/-/material-5.16.1.tgz#6fcef9b5709df5864cf0b0bc0ea7b453a9d9e420" - integrity sha512-BGTgJRb0d/hX9tus5CEb6N/Fo8pE4tYA+s9r4/S0PCrtZ3urCLXlTH4qrAvggQbiF1cYRAbHCkVHoQ+4Pdxl+w== +"@mui/material@^5.16.4": + version "5.16.4" + resolved "https://registry.yarnpkg.com/@mui/material/-/material-5.16.4.tgz#992d630637d9d38620e4937fb11d0a97965fdabf" + integrity sha512-dBnh3/zRYgEVIS3OE4oTbujse3gifA0qLMmuUk13ywsDCbngJsdgwW5LuYeiT5pfA8PGPGSqM7mxNytYXgiMCw== dependencies: "@babel/runtime" "^7.23.9" - "@mui/base" "5.0.0-beta.40" - "@mui/core-downloads-tracker" "^5.16.1" - "@mui/system" "^5.16.1" + "@mui/core-downloads-tracker" "^5.16.4" + "@mui/system" "^5.16.4" "@mui/types" "^7.2.15" - "@mui/utils" "^5.16.1" + "@mui/utils" "^5.16.4" + "@popperjs/core" "^2.11.8" "@types/react-transition-group" "^4.4.10" clsx "^2.1.0" csstype "^3.1.3" @@ -2229,51 +2189,52 @@ react-is "^18.3.1" react-transition-group "^4.4.5" -"@mui/private-theming@^5.16.1": - version "5.16.1" - resolved "https://registry.yarnpkg.com/@mui/private-theming/-/private-theming-5.16.1.tgz#e7f1b0cfd9b238231fca9a0b13a5b2a9d9592b35" - integrity sha512-2EGCKnAlq9vRIFj61jNWNXlKAxXp56577OVvsts7fAqRx+G1y6F+N7Q198SBaz8jYQeGKSz8ZMXK/M3FqjdEyw== +"@mui/private-theming@^5.16.4": + version "5.16.4" + resolved "https://registry.yarnpkg.com/@mui/private-theming/-/private-theming-5.16.4.tgz#0118f137975b35dc4774c6d593b8fcf86594c3fc" + integrity sha512-ZsAm8cq31SJ37SVWLRlu02v9SRthxnfQofaiv14L5Bht51B0dz6yQEoVU/V8UduZDCCIrWkBHuReVfKhE/UuXA== dependencies: "@babel/runtime" "^7.23.9" - "@mui/utils" "^5.16.1" + "@mui/utils" "^5.16.4" prop-types "^15.8.1" -"@mui/styled-engine@^5.16.1": - version "5.16.1" - resolved "https://registry.yarnpkg.com/@mui/styled-engine/-/styled-engine-5.16.1.tgz#7518f64f66edd6e09f129289cf6ece502520947f" - integrity sha512-JwWUBaYR8HHCFefSeos0z6JoTbu0MnjAuNHu4QoDgPxl2EE70XH38CsKay66Iy0QkNWmGTRXVU2sVFgUOPL/Dw== +"@mui/styled-engine@^5.16.4": + version "5.16.4" + resolved "https://registry.yarnpkg.com/@mui/styled-engine/-/styled-engine-5.16.4.tgz#a7a8c9079c307bab91ccd65ed5dd1496ddf2a3ab" + integrity sha512-0+mnkf+UiAmTVB8PZFqOhqf729Yh0Cxq29/5cA3VAyDVTRIUUQ8FXQhiAhUIbijFmM72rY80ahFPXIm4WDbzcA== dependencies: "@babel/runtime" "^7.23.9" "@emotion/cache" "^11.11.0" csstype "^3.1.3" prop-types "^15.8.1" -"@mui/system@^5.16.1": - version "5.16.1" - resolved "https://registry.yarnpkg.com/@mui/system/-/system-5.16.1.tgz#c08fddba592511d6916c6a70da292a7658551ccb" - integrity sha512-VaFcClC+uhvIEzhzcNmh9FRBvrG9IPjsOokhj6U1HPZsFnLzHV7AD7dJcT6LxWoiIZj9Ej0GK+MGh/b8+BtSlQ== +"@mui/system@^5.16.4": + version "5.16.4" + resolved "https://registry.yarnpkg.com/@mui/system/-/system-5.16.4.tgz#c03f971ed273f0ad06c69c949c05e866ad211407" + integrity sha512-ET1Ujl2/8hbsD611/mqUuNArMCGv/fIWO/f8B3ZqF5iyPHM2aS74vhTNyjytncc4i6dYwGxNk+tLa7GwjNS0/w== dependencies: "@babel/runtime" "^7.23.9" - "@mui/private-theming" "^5.16.1" - "@mui/styled-engine" "^5.16.1" + "@mui/private-theming" "^5.16.4" + "@mui/styled-engine" "^5.16.4" "@mui/types" "^7.2.15" - "@mui/utils" "^5.16.1" + "@mui/utils" "^5.16.4" clsx "^2.1.0" csstype "^3.1.3" prop-types "^15.8.1" -"@mui/types@^7.2.14", "@mui/types@^7.2.15": +"@mui/types@^7.2.15": version "7.2.15" resolved "https://registry.yarnpkg.com/@mui/types/-/types-7.2.15.tgz#dadd232fe9a70be0d526630675dff3b110f30b53" integrity sha512-nbo7yPhtKJkdf9kcVOF8JZHPZTmqXjJ/tI0bdWgHg5tp9AnIN4Y7f7wm9T+0SyGYJk76+GYZ8Q5XaTYAsUHN0Q== -"@mui/utils@^5.15.14", "@mui/utils@^5.16.1": - version "5.16.1" - resolved "https://registry.yarnpkg.com/@mui/utils/-/utils-5.16.1.tgz#068ddc236c10f71768133c144b3286d2cc815f5f" - integrity sha512-4UQzK46tAEYs2xZv79hRiIc3GxZScd00kGPDadNrGztAEZlmSaUY8cb9ITd2xCiTfzsx5AN6DH8aaQ8QEKJQeQ== +"@mui/utils@^5.16.4": + version "5.16.4" + resolved "https://registry.yarnpkg.com/@mui/utils/-/utils-5.16.4.tgz#8e50e27a630e3d8eeb3e9d3bc31cbb0e4956f5fd" + integrity sha512-nlppYwq10TBIFqp7qxY0SvbACOXeOjeVL3pOcDsK0FT8XjrEXh9/+lkg8AEIzD16z7YfiJDQjaJG2OLkE7BxNg== dependencies: "@babel/runtime" "^7.23.9" "@types/prop-types" "^15.7.12" + clsx "^2.1.1" prop-types "^15.8.1" react-is "^18.3.1" @@ -2432,10 +2393,10 @@ resolved "https://registry.yarnpkg.com/@popperjs/core/-/core-2.11.8.tgz#6b79032e760a0899cd4204710beede972a3a185f" integrity sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A== -"@remix-run/router@1.17.1": - version "1.17.1" - resolved "https://registry.yarnpkg.com/@remix-run/router/-/router-1.17.1.tgz#bf93997beb81863fde042ebd05013a2618471362" - integrity sha512-mCOMec4BKd6BRGBZeSnGiIgwsbLGp3yhVqAD8H+PxiRNEHgDpZb8J1TnrSDlg97t0ySKMQJTHCWBCmBpSmkF6Q== +"@remix-run/router@1.18.0": + version "1.18.0" + resolved "https://registry.yarnpkg.com/@remix-run/router/-/router-1.18.0.tgz#20b033d1f542a100c1d57cfd18ecf442d1784732" + integrity sha512-L3jkqmqoSVBVKHfpGZmLrex0lxR5SucGA0sUfFzGctehw+S/ggL9L/0NnC5mw6P8HUWpFZ3nQw3cRApjjWx9Sw== "@sinclair/typebox@^0.27.8": version "0.27.8" @@ -4020,10 +3981,10 @@ resolved "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz" integrity sha1-7ihweulOEdK4J7y+UnC86n8+ce4= -"@types/lodash@^4.14.167", "@types/lodash@^4.17.6": - version "4.17.6" - resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.17.6.tgz#193ced6a40c8006cfc1ca3f4553444fb38f0e543" - integrity sha512-OpXEVoCKSS3lQqjx9GGGOapBeuW5eUboYHRlHP9urXPX25IKZ6AnP5ZRxtVf63iieUbsHxLn8NQ5Nlftc6yzAA== +"@types/lodash@^4.14.167", "@types/lodash@^4.17.7": + version "4.17.7" + resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.17.7.tgz#2f776bcb53adc9e13b2c0dfd493dfcbd7de43612" + integrity sha512-8wTvZawATi/lsmNu10/j2hk1KEP0IvjubqPE3cu1Xz7xfXXt5oCq3SNUz4fMIP4XGF9Ky+Ue2tBA3hcS7LSBlA== "@types/mdast@^3.0.0": version "3.0.10" @@ -4077,10 +4038,10 @@ dependencies: "@types/node" "*" -"@types/node@*", "@types/node@^20.14.10": - version "20.14.10" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.14.10.tgz#a1a218290f1b6428682e3af044785e5874db469a" - integrity sha512-MdiXf+nDuMvY0gJKxyfZ7/6UFsETO7mGKF54MVD/ekJS6HdFtpZFBgrh6Pseu64XTb2MLyFPlbW6hj8HYRQNOQ== +"@types/node@*", "@types/node@^20.14.11": + version "20.14.11" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.14.11.tgz#09b300423343460455043ddd4d0ded6ac579b74b" + integrity sha512-kprQpL8MMeszbz6ojB5/tU8PLN4kesnN8Gjzw349rDlNgsSzg90lAVj3llK99Dh7JON+t9AuscPPFW6mPbTnSA== dependencies: undici-types "~5.26.4" @@ -6761,10 +6722,10 @@ clone-deep@^4.0.1: kind-of "^6.0.2" shallow-clone "^3.0.0" -clsx@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/clsx/-/clsx-2.1.0.tgz#e851283bcb5c80ee7608db18487433f7b23f77cb" - integrity sha512-m3iNNWpd9rl3jvvcBnu70ylMdrXt8Vlq4HYadnU5fwcOtvkSQWPmj7amUcDT2qYI7risszBjI5AUIUox9D16pg== +clsx@^2.1.0, clsx@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/clsx/-/clsx-2.1.1.tgz#eed397c9fd8bd882bfb18deab7102049a2f32999" + integrity sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA== co@^4.6.0: version "4.6.0" @@ -7532,10 +7493,10 @@ dateformat@^4.6.3: resolved "https://registry.npmjs.org/dateformat/-/dateformat-4.6.3.tgz" integrity sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA== -dayjs@1.11.11: - version "1.11.11" - resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.11.11.tgz#dfe0e9d54c5f8b68ccf8ca5f72ac603e7e5ed59e" - integrity sha512-okzr3f11N6WuqYtZSvm+F776mB41wRZMhKP+hc34YdW+KmtYYK9iqvHSwo2k9FEH3fhGXvOPV6yz2IcSrfRUDg== +dayjs@1.11.12: + version "1.11.12" + resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.11.12.tgz#5245226cc7f40a15bf52e0b99fd2a04669ccac1d" + integrity sha512-Rt2g+nTbLlDWZTwwrIXjy9MeiZmSDI375FvZs72ngxx8PDC6YXOeR3q5LAuPzjZQxhiWdRKac7RKV+YyQYfYIg== debounce@^1.2.1: version "1.2.1" @@ -8737,10 +8698,10 @@ eslint-plugin-react-hooks@^4.6.2: resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.2.tgz#c829eb06c0e6f484b3fbb85a97e57784f328c596" integrity sha512-QzliNJq4GinDBcD8gPB5v0wh6g8q3SUi6EFF0x8N/BL9PoVs0atuGc47ozMRyOWAKdwaZ5OnbOEa3WR+dSGKuQ== -eslint-plugin-react@^7.34.3: - version "7.34.3" - resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.34.3.tgz#9965f27bd1250a787b5d4cfcc765e5a5d58dcb7b" - integrity sha512-aoW4MV891jkUulwDApQbPYTVZmeuSyFrudpbTAQuj5Fv8VL+o6df2xIGpw8B0hPjAaih1/Fb0om9grCdyFYemA== +eslint-plugin-react@^7.34.4: + version "7.34.4" + resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.34.4.tgz#1f0dc313a0937db7ce15fd1f6c3d77e70f3e02fb" + integrity sha512-Np+jo9bUwJNxCsT12pXtrGhJgT3T44T1sHhn1Ssr42XFn8TES0267wPGo5nNrMHi8qkyimDAX2BUmkf9pSaVzA== dependencies: array-includes "^3.1.8" array.prototype.findlast "^1.2.5" @@ -8750,16 +8711,17 @@ eslint-plugin-react@^7.34.3: doctrine "^2.1.0" es-iterator-helpers "^1.0.19" estraverse "^5.3.0" + hasown "^2.0.2" jsx-ast-utils "^2.4.1 || ^3.0.0" minimatch "^3.1.2" object.entries "^1.1.8" object.fromentries "^2.0.8" - object.hasown "^1.1.4" object.values "^1.2.0" prop-types "^15.8.1" resolve "^2.0.0-next.5" semver "^6.3.1" string.prototype.matchall "^4.0.11" + string.prototype.repeat "^1.0.0" eslint-plugin-standard@5.0.0: version "5.0.0" @@ -13149,15 +13111,6 @@ object.groupby@^1.0.1: es-abstract "^1.22.1" get-intrinsic "^1.2.1" -object.hasown@^1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/object.hasown/-/object.hasown-1.1.4.tgz#e270ae377e4c120cdcb7656ce66884a6218283dc" - integrity sha512-FZ9LZt9/RHzGySlBARE3VF+gE26TxR38SdmqOqliuTnl9wrKulaQs+4dee1V+Io8VfxqzAfHu6YuRgUy8OHoTg== - dependencies: - define-properties "^1.2.1" - es-abstract "^1.23.2" - es-object-atoms "^1.0.0" - object.pick@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" @@ -13663,12 +13616,7 @@ picocolors@^0.2.1: resolved "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz" integrity sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA== -picocolors@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" - integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== - -picocolors@^1.0.1: +picocolors@^1.0.0, picocolors@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.1.tgz#a8ad579b571952f0e5d25892de5445bcfe25aaa1" integrity sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew== @@ -14536,20 +14484,20 @@ react-remarkable@^1.1.3: dependencies: remarkable "^1.x" -react-router-dom@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/react-router-dom/-/react-router-dom-6.24.1.tgz#b1a22f7d6c5a1bfce30732bd370713f991ab4de4" - integrity sha512-U19KtXqooqw967Vw0Qcn5cOvrX5Ejo9ORmOtJMzYWtCT4/WOfFLIZGGsVLxcd9UkBO0mSTZtXqhZBsWlHr7+Sg== +react-router-dom@^6.25.1: + version "6.25.1" + resolved "https://registry.yarnpkg.com/react-router-dom/-/react-router-dom-6.25.1.tgz#b89f8d63fc8383ea4e89c44bf31c5843e1f7afa0" + integrity sha512-0tUDpbFvk35iv+N89dWNrJp+afLgd+y4VtorJZuOCXK0kkCWjEvb3vTJM++SYvMEpbVwXKf3FjeVveVEb6JpDQ== dependencies: - "@remix-run/router" "1.17.1" - react-router "6.24.1" + "@remix-run/router" "1.18.0" + react-router "6.25.1" -react-router@6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/react-router/-/react-router-6.24.1.tgz#5a3bbba0000afba68d42915456ca4c806f37a7de" - integrity sha512-PTXFXGK2pyXpHzVo3rR9H7ip4lSPZZc0bHG5CARmj65fTT6qG7sTngmb6lcYu1gf3y/8KxORoy9yn59pGpCnpg== +react-router@6.25.1: + version "6.25.1" + resolved "https://registry.yarnpkg.com/react-router/-/react-router-6.25.1.tgz#70b4f1af79954cfcfd23f6ddf5c883e8c904203e" + integrity sha512-u8ELFr5Z6g02nUtpPAggP73Jigj1mRePSwhS/2nkTrlPU5yEkH1vYzWNyvSnSzeeE2DNqWdH+P8OhIh9wuXhTw== dependencies: - "@remix-run/router" "1.17.1" + "@remix-run/router" "1.18.0" react-router@^5.1: version "5.3.4" @@ -15393,10 +15341,10 @@ semver@^6.0.0, semver@^6.1.0, semver@^6.1.2, semver@^6.3.0, semver@^6.3.1: resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== -semver@^7.3.2, semver@^7.3.4, semver@^7.3.5, semver@^7.3.7, semver@^7.5.3, semver@^7.5.4, semver@^7.6.2: - version "7.6.2" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.2.tgz#1e3b34759f896e8f14d6134732ce798aeb0c6e13" - integrity sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w== +semver@^7.3.2, semver@^7.3.4, semver@^7.3.5, semver@^7.3.7, semver@^7.5.3, semver@^7.5.4, semver@^7.6.3: + version "7.6.3" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.3.tgz#980f7b5550bc175fb4dc09403085627f9eb33143" + integrity sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A== send@0.18.0: version "0.18.0" @@ -16075,6 +16023,14 @@ string.prototype.padstart@^3.0.0: define-properties "^1.1.4" es-abstract "^1.20.4" +string.prototype.repeat@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/string.prototype.repeat/-/string.prototype.repeat-1.0.0.tgz#e90872ee0308b29435aa26275f6e1b762daee01a" + integrity sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.5" + string.prototype.trim@^1.2.8: version "1.2.8" resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz#f9ac6f8af4bd55ddfa8895e6aea92a96395393bd" @@ -16451,10 +16407,10 @@ synchronous-promise@^2.0.15: resolved "https://registry.yarnpkg.com/synchronous-promise/-/synchronous-promise-2.0.17.tgz#38901319632f946c982152586f2caf8ddc25c032" integrity sha512-AsS729u2RHUfEra9xJrE39peJcc2stq2+poBXX8bcM08Y6g9j/i/PUzwNQqkaJde7Ntg1TO7bSREbR5sdosQ+g== -tailwindcss@^3.4.4: - version "3.4.4" - resolved "https://registry.yarnpkg.com/tailwindcss/-/tailwindcss-3.4.4.tgz#351d932273e6abfa75ce7d226b5bf3a6cb257c05" - integrity sha512-ZoyXOdJjISB7/BcLTR6SEsLgKtDStYyYZVLsUtWChO4Ps20CBad7lfJKVDiejocV4ME1hLmyY0WJE3hSDcmQ2A== +tailwindcss@^3.4.6: + version "3.4.6" + resolved "https://registry.yarnpkg.com/tailwindcss/-/tailwindcss-3.4.6.tgz#41faae16607e0916da1eaa4a3b44053457ba70dd" + integrity sha512-1uRHzPB+Vzu57ocybfZ4jh5Q3SdlH7XW23J5sQoM9LhE9eIOlzxer/3XPSsycvih3rboRsvt0QCmzSrqyOYUIA== dependencies: "@alloc/quick-lru" "^5.2.0" arg "^5.0.2" From 4b8d362089f5136ef674114b3b9c21fa27530010 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 20 Jul 2024 18:07:38 +0000 Subject: [PATCH 003/123] Bump source-map-loader from 0.2.4 to 5.0.0 in /web (#4774) Bumps [source-map-loader](https://github.com/webpack-contrib/source-map-loader) from 0.2.4 to 5.0.0. - [Release notes](https://github.com/webpack-contrib/source-map-loader/releases) - [Changelog](https://github.com/webpack-contrib/source-map-loader/blob/master/CHANGELOG.md) - [Commits](https://github.com/webpack-contrib/source-map-loader/compare/v0.2.4...v5.0.0) --- updated-dependencies: - dependency-name: source-map-loader dependency-type: direct:development update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- web/package.json | 2 +- web/yarn.lock | 23 ++++++++--------------- 2 files changed, 9 insertions(+), 16 deletions(-) diff --git a/web/package.json b/web/package.json index 9fbad93c2b..6129e11ed5 100644 --- a/web/package.json +++ b/web/package.json @@ -104,7 +104,7 @@ "prop-types": "^15.7.2", "sass": "^1.77.8", "sass-loader": "12.4.0", - "source-map-loader": "^0.2.4", + "source-map-loader": "^5.0.0", "stream-browserify": "^3.0.0", "style-loader": "^3.3.4", "tailwindcss": "^3.4.6", diff --git a/web/yarn.lock b/web/yarn.lock index 0eb98b1551..4315cdd6f2 100644 --- a/web/yarn.lock +++ b/web/yarn.lock @@ -5340,13 +5340,6 @@ async-each@^1.0.1: resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.6.tgz#52f1d9403818c179b7561e11a5d1b77eb2160e77" integrity sha512-c646jH1avxr+aVpndVMeAfYw7wAa6idufrlN3LPA4PmKS0QEGp6PIC9nwz0WQkkvBGAMEki3pFdtxaF39J9vvg== -async@^2.5.0: - version "2.6.4" - resolved "https://registry.npmjs.org/async/-/async-2.6.4.tgz" - integrity sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA== - dependencies: - lodash "^4.17.14" - asynckit@^0.4.0: version "0.4.0" resolved "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz" @@ -11982,7 +11975,7 @@ loader-runner@^4.2.0: resolved "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz" integrity sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg== -loader-utils@^1.1.0, loader-utils@^1.2.3: +loader-utils@^1.2.3: version "1.4.2" resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.4.2.tgz#29a957f3a63973883eb684f10ffd3d151fec01a3" integrity sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg== @@ -12094,7 +12087,7 @@ lodash.uniq@4.5.0: resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" integrity sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ== -lodash@4.17.21, lodash@^4.17.11, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.20, lodash@^4.17.21, lodash@^4.17.4: +lodash@4.17.21, lodash@^4.17.11, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.20, lodash@^4.17.21, lodash@^4.17.4: version "4.17.21" resolved "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== @@ -15672,13 +15665,13 @@ source-list-map@^2.0.0: resolved "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz" integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== -source-map-loader@^0.2.4: - version "0.2.4" - resolved "https://registry.npmjs.org/source-map-loader/-/source-map-loader-0.2.4.tgz" - integrity sha512-OU6UJUty+i2JDpTItnizPrlpOIBLmQbWMuBg9q5bVtnHACqw1tn9nNwqJLbv0/00JjnJb/Ee5g5WS5vrRv7zIQ== +source-map-loader@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/source-map-loader/-/source-map-loader-5.0.0.tgz#f593a916e1cc54471cfc8851b905c8a845fc7e38" + integrity sha512-k2Dur7CbSLcAH73sBcIkV5xjPV4SzqO1NJ7+XaQl8if3VODDUj3FNchNGpqgJSKbvUfJuhVdv8K2Eu8/TNl2eA== dependencies: - async "^2.5.0" - loader-utils "^1.1.0" + iconv-lite "^0.6.3" + source-map-js "^1.0.2" source-map-resolve@^0.5.0: version "0.5.3" From 815c1373bacb6a7e3be3ee884609a803ff854ae3 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 21 Jul 2024 00:25:58 +0000 Subject: [PATCH 004/123] Bump the security group in /kurl_proxy with 3 updates (#4775) Bumps the security group in /kurl_proxy with 3 updates: [k8s.io/api](https://github.com/kubernetes/api), [k8s.io/apimachinery](https://github.com/kubernetes/apimachinery) and [k8s.io/client-go](https://github.com/kubernetes/client-go). Updates `k8s.io/api` from 0.30.2 to 0.30.3 - [Commits](https://github.com/kubernetes/api/compare/v0.30.2...v0.30.3) Updates `k8s.io/apimachinery` from 0.30.2 to 0.30.3 - [Commits](https://github.com/kubernetes/apimachinery/compare/v0.30.2...v0.30.3) Updates `k8s.io/client-go` from 0.30.2 to 0.30.3 - [Changelog](https://github.com/kubernetes/client-go/blob/master/CHANGELOG.md) - [Commits](https://github.com/kubernetes/client-go/compare/v0.30.2...v0.30.3) --- updated-dependencies: - dependency-name: k8s.io/api dependency-type: direct:production update-type: version-update:semver-patch dependency-group: security - dependency-name: k8s.io/apimachinery dependency-type: direct:production update-type: version-update:semver-patch dependency-group: security - dependency-name: k8s.io/client-go dependency-type: direct:production update-type: version-update:semver-patch dependency-group: security ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- kurl_proxy/go.mod | 6 +++--- kurl_proxy/go.sum | 12 ++++++------ 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/kurl_proxy/go.mod b/kurl_proxy/go.mod index c96f767f96..f856ae4a34 100644 --- a/kurl_proxy/go.mod +++ b/kurl_proxy/go.mod @@ -9,9 +9,9 @@ require ( github.com/pkg/errors v0.9.1 github.com/soheilhy/cmux v0.1.5 gopkg.in/yaml.v2 v2.4.0 - k8s.io/api v0.30.2 - k8s.io/apimachinery v0.30.2 - k8s.io/client-go v0.30.2 + k8s.io/api v0.30.3 + k8s.io/apimachinery v0.30.3 + k8s.io/client-go v0.30.3 ) require ( diff --git a/kurl_proxy/go.sum b/kurl_proxy/go.sum index 3f16a4a7c7..1f2a777429 100644 --- a/kurl_proxy/go.sum +++ b/kurl_proxy/go.sum @@ -185,12 +185,12 @@ gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -k8s.io/api v0.30.2 h1:+ZhRj+28QT4UOH+BKznu4CBgPWgkXO7XAvMcMl0qKvI= -k8s.io/api v0.30.2/go.mod h1:ULg5g9JvOev2dG0u2hig4Z7tQ2hHIuS+m8MNZ+X6EmI= -k8s.io/apimachinery v0.30.2 h1:fEMcnBj6qkzzPGSVsAZtQThU62SmQ4ZymlXRC5yFSCg= -k8s.io/apimachinery v0.30.2/go.mod h1:iexa2somDaxdnj7bha06bhb43Zpa6eWH8N8dbqVjTUc= -k8s.io/client-go v0.30.2 h1:sBIVJdojUNPDU/jObC+18tXWcTJVcwyqS9diGdWHk50= -k8s.io/client-go v0.30.2/go.mod h1:JglKSWULm9xlJLx4KCkfLLQ7XwtlbflV6uFFSHTMgVs= +k8s.io/api v0.30.3 h1:ImHwK9DCsPA9uoU3rVh4QHAHHK5dTSv1nxJUapx8hoQ= +k8s.io/api v0.30.3/go.mod h1:GPc8jlzoe5JG3pb0KJCSLX5oAFIW3/qNJITlDj8BH04= +k8s.io/apimachinery v0.30.3 h1:q1laaWCmrszyQuSQCfNB8cFgCuDAoPszKY4ucAjDwHc= +k8s.io/apimachinery v0.30.3/go.mod h1:iexa2somDaxdnj7bha06bhb43Zpa6eWH8N8dbqVjTUc= +k8s.io/client-go v0.30.3 h1:bHrJu3xQZNXIi8/MoxYtZBBWQQXwy16zqJwloXXfD3k= +k8s.io/client-go v0.30.3/go.mod h1:8d4pf8vYu665/kUbsxWAQ/JDBNWqfFeZnvFiVdmx89U= k8s.io/klog/v2 v2.120.1 h1:QXU6cPEOIslTGvZaXvFWiP9VKyeet3sawzTOvdXb4Vw= k8s.io/klog/v2 v2.120.1/go.mod h1:3Jpz1GvMt720eyJH1ckRHK1EDfpxISzJ7I9OYgaDtPE= k8s.io/kube-openapi v0.0.0-20240228011516-70dd3763d340 h1:BZqlfIlq5YbRMFko6/PM7FjZpUb45WallggurYhKGag= From 84e4a74ab64314f09c9f0be3c4945a94372117d9 Mon Sep 17 00:00:00 2001 From: replicated-ci-kots <91219917+replicated-ci-kots@users.noreply.github.com> Date: Wed, 24 Jul 2024 23:05:31 +0000 Subject: [PATCH 005/123] Automated KOTS Image Dependency Tag Update (#4780) * Update KOTS image dependency tags --------- Co-authored-by: sgalsaleh <39952863+sgalsaleh@users.noreply.github.com> Co-authored-by: Salah Al Saleh --- .image.env | 2 +- Makefile | 2 +- deploy/dex/apko.yaml.tmpl | 1 + deploy/minio/apko.yaml.tmpl | 1 + deploy/rqlite/apko.yaml.tmpl | 1 + pkg/image/constants.go | 2 +- 6 files changed, 6 insertions(+), 3 deletions(-) diff --git a/.image.env b/.image.env index 9e77d33f00..08827491c4 100644 --- a/.image.env +++ b/.image.env @@ -1,7 +1,7 @@ # Generated file, do not modify. This file is generated from a text file containing a list of images. The # most recent tag is interpolated from the source repository and used to generate a fully qualified image # name. -MINIO_TAG='0.20240715.190230-r0' +MINIO_TAG='0.20240716.234641-r0' RQLITE_TAG='8.26.7-r0' DEX_TAG='2.40.0-r3' SCHEMAHERO_TAG='0.17.9' diff --git a/Makefile b/Makefile index 259eb567a6..e6d5c92ab2 100644 --- a/Makefile +++ b/Makefile @@ -1,6 +1,6 @@ include Makefile.build.mk CURRENT_USER := $(if $(GITHUB_USER),$(GITHUB_USER),$(shell id -u -n)) -MINIO_TAG ?= 0.20240715.190230-r0 +MINIO_TAG ?= 0.20240716.234641-r0 RQLITE_TAG ?= 8.26.7-r0 DEX_TAG ?= 2.40.0-r3 LVP_TAG ?= v0.6.7 diff --git a/deploy/dex/apko.yaml.tmpl b/deploy/dex/apko.yaml.tmpl index 8f078918e2..e2a396c2a9 100644 --- a/deploy/dex/apko.yaml.tmpl +++ b/deploy/dex/apko.yaml.tmpl @@ -7,6 +7,7 @@ contents: - dex=__DEX_VERSION__ - gomplate - bash + - busybox accounts: groups: diff --git a/deploy/minio/apko.yaml.tmpl b/deploy/minio/apko.yaml.tmpl index ff2c151f8c..5829a2dd1f 100644 --- a/deploy/minio/apko.yaml.tmpl +++ b/deploy/minio/apko.yaml.tmpl @@ -7,6 +7,7 @@ contents: - minio=__MINIO_VERSION__ - mc - bash + - busybox accounts: groups: diff --git a/deploy/rqlite/apko.yaml.tmpl b/deploy/rqlite/apko.yaml.tmpl index beae8dc9b4..d469a16e51 100644 --- a/deploy/rqlite/apko.yaml.tmpl +++ b/deploy/rqlite/apko.yaml.tmpl @@ -7,6 +7,7 @@ contents: - rqlite=__RQLITE_VERSION__ - rqlite-oci-entrypoint=__RQLITE_VERSION__ - bash + - busybox accounts: groups: diff --git a/pkg/image/constants.go b/pkg/image/constants.go index 69e6bce6b2..c30a0ec378 100644 --- a/pkg/image/constants.go +++ b/pkg/image/constants.go @@ -5,7 +5,7 @@ package image // image name. const ( - Minio = "kotsadm/minio:0.20240715.190230-r0" + Minio = "kotsadm/minio:0.20240716.234641-r0" Rqlite = "kotsadm/rqlite:8.26.7-r0" Dex = "kotsadm/dex:2.40.0-r3" Schemahero = "schemahero/schemahero:0.17.9" From 1fec2a7b967826b0d140f667bf8acbbd6e261336 Mon Sep 17 00:00:00 2001 From: Gerard Nguyen Date: Thu, 25 Jul 2024 10:30:36 +1000 Subject: [PATCH 006/123] feat: update default support bundle spec with PVC check (#4778) * update default spec with pvcs check * updates for skaffold dev --- hack/dev/entrypoint.sh | 2 +- hack/dev/skaffoldcache.Dockerfile | 2 +- kustomize/base/deployment.yaml | 2 ++ kustomize/base/service.yaml | 14 +++++++---- .../staticspecs/defaultspec.yaml | 25 ++++++++++++++++++- 5 files changed, 37 insertions(+), 8 deletions(-) diff --git a/hack/dev/entrypoint.sh b/hack/dev/entrypoint.sh index d739b07c6e..3e1a18bc87 100755 --- a/hack/dev/entrypoint.sh +++ b/hack/dev/entrypoint.sh @@ -1,7 +1,7 @@ #!/bin/bash if [ "$DEBUG_KOTSADM" = "1" ]; then - /dlv --listen=:40000 --continue --headless=true --api-version=2 --accept-multiclient exec /kotsadm api + /dlv --listen=:30001 --continue --headless=true --api-version=2 --accept-multiclient exec /kotsadm api else /kotsadm api fi diff --git a/hack/dev/skaffoldcache.Dockerfile b/hack/dev/skaffoldcache.Dockerfile index f500b80bbd..a0bc55fcfd 100644 --- a/hack/dev/skaffoldcache.Dockerfile +++ b/hack/dev/skaffoldcache.Dockerfile @@ -1,6 +1,6 @@ FROM golang:1.22 as deps -RUN go install github.com/go-delve/delve/cmd/dlv@v1.7.2 +RUN go install github.com/go-delve/delve/cmd/dlv@v1.22.1 ENV PROJECTPATH=/go/src/github.com/replicatedhq/kots WORKDIR $PROJECTPATH diff --git a/kustomize/base/deployment.yaml b/kustomize/base/deployment.yaml index 54858ae1ee..c227fcc36e 100644 --- a/kustomize/base/deployment.yaml +++ b/kustomize/base/deployment.yaml @@ -26,6 +26,8 @@ spec: ports: - name: http containerPort: 3000 + - name: dlv + containerPort: 30001 env: - name: POD_NAMESPACE valueFrom: diff --git a/kustomize/base/service.yaml b/kustomize/base/service.yaml index af0797effd..9c46e05ca3 100644 --- a/kustomize/base/service.yaml +++ b/kustomize/base/service.yaml @@ -3,7 +3,7 @@ kind: Service metadata: name: kotsadm labels: - kots.io/kotsadm: 'true' + kots.io/kotsadm: "true" kots.io/backup: velero app: kotsadm annotations: @@ -11,9 +11,13 @@ metadata: spec: type: NodePort ports: - - name: http - port: 3000 - targetPort: http - nodePort: 30000 + - name: http + port: 3000 + targetPort: http + nodePort: 30000 + - name: dlv + port: 30001 + targetPort: dlv + nodePort: 30001 selector: app: kotsadm diff --git a/pkg/supportbundle/staticspecs/defaultspec.yaml b/pkg/supportbundle/staticspecs/defaultspec.yaml index c0e30801c7..baba0c20a8 100644 --- a/pkg/supportbundle/staticspecs/defaultspec.yaml +++ b/pkg/supportbundle/staticspecs/defaultspec.yaml @@ -95,6 +95,7 @@ spec: selector: - app=kotsadm timeout: 10s + - nodeMetrics: {} analyzers: - clusterVersion: @@ -150,4 +151,26 @@ spec: outcomes: - fail: when: "!= Healthy" # Catch all unhealthy pods. A pod is considered healthy if it has a status of Completed, or Running and all of its containers are ready. - message: A Contour pod, {{ .Name }}, is unhealthy with a status of {{ .Status.Reason }}. Restarting the pod may fix the issue. \ No newline at end of file + message: A Contour pod, {{ .Name }}, is unhealthy with a status of {{ .Status.Reason }}. Restarting the pod may fix the issue. + - nodeMetrics: + checkName: kotsadm rqlite PVC usage + filters: + pvc: + nameRegex: "kotsadm-rqlite.*" + outcomes: + - fail: + when: "pvcUsedPercentage >= 80%" + message: "kotsadm-rqlite PVC using more than 80% of storage" + - pass: + message: "kotsadm-rqlite PVC is using less than 80% of storage" + - nodeMetrics: + checkName: kotsadm minio PVC usage + filters: + pvc: + nameRegex: "kotsadm-minio.*" + outcomes: + - fail: + when: "pvcUsedPercentage >= 80%" + message: "kotsadm-minio PVC using more than 80% of storage" + - pass: + message: "kotsadm-minio PVC is using less than 80% of storage" \ No newline at end of file From 3829fb090b5bf066052e91e7b0f479e0358f7569 Mon Sep 17 00:00:00 2001 From: Salah Al Saleh Date: Fri, 26 Jul 2024 10:45:14 -0700 Subject: [PATCH 007/123] Add support for Velero 1.14 (#4782) --- pkg/embeddedcluster/util.go | 6 +- pkg/kotsadmsnapshot/backup.go | 71 ++++++---- pkg/kotsadmsnapshot/backup_test.go | 202 +++++++++++++++++++++++++++-- 3 files changed, 238 insertions(+), 41 deletions(-) diff --git a/pkg/embeddedcluster/util.go b/pkg/embeddedcluster/util.go index 8a7ece4667..1ca7267e23 100644 --- a/pkg/embeddedcluster/util.go +++ b/pkg/embeddedcluster/util.go @@ -18,8 +18,8 @@ import ( ) const ( - seaweedfsNamespace = "seaweedfs" - seaweedfsS3SVCName = "ec-seaweedfs-s3" + SeaweedfsNamespace = "seaweedfs" + SeaweedfsS3SVCName = "ec-seaweedfs-s3" ) // ErrNoInstallations is returned when no installation object is found in the cluster. @@ -101,7 +101,7 @@ func ClusterConfig(ctx context.Context, kbClient kbclient.Client) (*embeddedclus } func GetSeaweedFSS3ServiceIP(ctx context.Context, kbClient kbclient.Client) (string, error) { - nsn := k8stypes.NamespacedName{Name: seaweedfsS3SVCName, Namespace: seaweedfsNamespace} + nsn := k8stypes.NamespacedName{Name: SeaweedfsS3SVCName, Namespace: SeaweedfsNamespace} var svc corev1.Service if err := kbClient.Get(ctx, nsn, &svc); err != nil && !k8serrors.IsNotFound(err) { return "", fmt.Errorf("failed to get seaweedfs s3 service: %w", err) diff --git a/pkg/kotsadmsnapshot/backup.go b/pkg/kotsadmsnapshot/backup.go index c323250773..10df057231 100644 --- a/pkg/kotsadmsnapshot/backup.go +++ b/pkg/kotsadmsnapshot/backup.go @@ -12,6 +12,7 @@ import ( units "github.com/docker/go-units" "github.com/pkg/errors" + embeddedclusterv1beta1 "github.com/replicatedhq/embedded-cluster-kinds/apis/v1beta1" downstreamtypes "github.com/replicatedhq/kots/pkg/api/downstream/types" apptypes "github.com/replicatedhq/kots/pkg/app/types" "github.com/replicatedhq/kots/pkg/embeddedcluster" @@ -35,6 +36,7 @@ import ( "k8s.io/apimachinery/pkg/fields" "k8s.io/apimachinery/pkg/labels" "k8s.io/client-go/kubernetes" + kbclient "sigs.k8s.io/controller-runtime/pkg/client" ) func CreateApplicationBackup(ctx context.Context, a *apptypes.App, isScheduled bool) (*velerov1.Backup, error) { @@ -128,7 +130,7 @@ func CreateApplicationBackup(ctx context.Context, a *apptypes.App, isScheduled b includedNamespaces = append(includedNamespaces, veleroBackup.Spec.IncludedNamespaces...) includedNamespaces = append(includedNamespaces, kotsKinds.KotsApplication.Spec.AdditionalNamespaces...) - veleroBackup.Spec.IncludedNamespaces = prepareIncludedNamespaces(includedNamespaces, util.IsEmbeddedCluster()) + veleroBackup.Spec.IncludedNamespaces = prepareIncludedNamespaces(includedNamespaces) snapshotTrigger := "manual" if isScheduled { @@ -382,21 +384,14 @@ func CreateInstanceBackup(ctx context.Context, cluster *downstreamtypes.Downstre if err != nil { return nil, fmt.Errorf("failed to get current installation: %w", err) } - seaweedFSS3ServiceIP, err := embeddedcluster.GetSeaweedFSS3ServiceIP(ctx, kbClient) + ecAnnotations, err := ecBackupAnnotations(ctx, kbClient, installation) if err != nil { - return nil, fmt.Errorf("failed to get seaweedfs s3 service ip: %w", err) + return nil, fmt.Errorf("failed to get embedded cluster backup annotations: %w", err) } - if seaweedFSS3ServiceIP != "" { - backupAnnotations["kots.io/embedded-cluster-seaweedfs-s3-ip"] = seaweedFSS3ServiceIP - } - backupAnnotations["kots.io/embedded-cluster"] = "true" - backupAnnotations["kots.io/embedded-cluster-id"] = util.EmbeddedClusterID() - backupAnnotations["kots.io/embedded-cluster-version"] = util.EmbeddedClusterVersion() - backupAnnotations["kots.io/embedded-cluster-is-ha"] = strconv.FormatBool(installation.Spec.HighAvailability) - if installation.Spec.Network != nil { - backupAnnotations["kots.io/embedded-cluster-pod-cidr"] = installation.Spec.Network.PodCIDR - backupAnnotations["kots.io/embedded-cluster-service-cidr"] = installation.Spec.Network.ServiceCIDR + for k, v := range ecAnnotations { + backupAnnotations[k] = v } + includedNamespaces = append(includedNamespaces, ecIncludedNamespaces(installation)...) } includeClusterResources := true @@ -409,7 +404,7 @@ func CreateInstanceBackup(ctx context.Context, cluster *downstreamtypes.Downstre }, Spec: velerov1.BackupSpec{ StorageLocation: "default", - IncludedNamespaces: prepareIncludedNamespaces(includedNamespaces, util.IsEmbeddedCluster()), + IncludedNamespaces: prepareIncludedNamespaces(includedNamespaces), ExcludedNamespaces: excludedNamespaces, IncludeClusterResources: &includeClusterResources, OrLabelSelectors: instanceBackupLabelSelectors(util.IsEmbeddedCluster()), @@ -985,11 +980,47 @@ func mergeLabelSelector(kots metav1.LabelSelector, app metav1.LabelSelector) met return kots } +// ecBackupAnnotations returns the annotations that should be added to an embedded cluster backup +func ecBackupAnnotations(ctx context.Context, kbClient kbclient.Client, in *embeddedclusterv1beta1.Installation) (map[string]string, error) { + annotations := map[string]string{} + + seaweedFSS3ServiceIP, err := embeddedcluster.GetSeaweedFSS3ServiceIP(ctx, kbClient) + if err != nil { + return nil, fmt.Errorf("failed to get seaweedfs s3 service ip: %w", err) + } + if seaweedFSS3ServiceIP != "" { + annotations["kots.io/embedded-cluster-seaweedfs-s3-ip"] = seaweedFSS3ServiceIP + } + + annotations["kots.io/embedded-cluster"] = "true" + annotations["kots.io/embedded-cluster-id"] = util.EmbeddedClusterID() + annotations["kots.io/embedded-cluster-version"] = util.EmbeddedClusterVersion() + annotations["kots.io/embedded-cluster-is-ha"] = strconv.FormatBool(in.Spec.HighAvailability) + + if in.Spec.Network != nil { + annotations["kots.io/embedded-cluster-pod-cidr"] = in.Spec.Network.PodCIDR + annotations["kots.io/embedded-cluster-service-cidr"] = in.Spec.Network.ServiceCIDR + } + + return annotations, nil +} + +// ecIncludedNamespaces returns the namespaces that should be included in an embedded cluster backup +func ecIncludedNamespaces(in *embeddedclusterv1beta1.Installation) []string { + includedNamespaces := []string{"embedded-cluster", "kube-system", "openebs"} + if in.Spec.AirGap { + includedNamespaces = append(includedNamespaces, "registry") + if in.Spec.HighAvailability { + includedNamespaces = append(includedNamespaces, "seaweedfs") + } + } + return includedNamespaces +} + // Prepares the list of unique namespaces that will be included in a backup. Empty namespaces are excluded. // If a wildcard is specified, any specific namespaces will not be included since the backup will include all namespaces. // Velero does not allow for both a wildcard and specific namespaces and will consider the backup invalid if both are present. -// If this is an embedded-cluster installation, the "embedded-cluster", "openebs" and "kube-system" namespaces will be included. -func prepareIncludedNamespaces(namespaces []string, isEC bool) []string { +func prepareIncludedNamespaces(namespaces []string) []string { uniqueNamespaces := make(map[string]bool) for _, n := range namespaces { if n == "" { @@ -1000,14 +1031,6 @@ func prepareIncludedNamespaces(namespaces []string, isEC bool) []string { uniqueNamespaces[n] = true } - if isEC { - uniqueNamespaces["embedded-cluster"] = true - uniqueNamespaces["kube-system"] = true - uniqueNamespaces["openebs"] = true - uniqueNamespaces["registry"] = true - uniqueNamespaces["seaweedfs"] = true - } - includedNamespaces := make([]string, len(uniqueNamespaces)) i := 0 for k := range uniqueNamespaces { diff --git a/pkg/kotsadmsnapshot/backup_test.go b/pkg/kotsadmsnapshot/backup_test.go index 9386d2c790..dc6cb5fb5f 100644 --- a/pkg/kotsadmsnapshot/backup_test.go +++ b/pkg/kotsadmsnapshot/backup_test.go @@ -4,6 +4,8 @@ import ( "context" "testing" + embeddedclusterv1beta1 "github.com/replicatedhq/embedded-cluster-kinds/apis/v1beta1" + "github.com/replicatedhq/kots/pkg/embeddedcluster" kotsadmtypes "github.com/replicatedhq/kots/pkg/kotsadm/types" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" @@ -17,6 +19,8 @@ import ( "k8s.io/client-go/kubernetes" "k8s.io/client-go/kubernetes/fake" coretest "k8s.io/client-go/testing" + kbclient "sigs.k8s.io/controller-runtime/pkg/client" + fakekbclient "sigs.k8s.io/controller-runtime/pkg/client/fake" ) func TestPrepareIncludedNamespaces(t *testing.T) { @@ -24,7 +28,6 @@ func TestPrepareIncludedNamespaces(t *testing.T) { name string namespaces []string want []string - isEC bool }{ { name: "empty", @@ -76,23 +79,11 @@ func TestPrepareIncludedNamespaces(t *testing.T) { namespaces: []string{"*", "", "test"}, want: []string{"*"}, }, - { - name: "wildcard with embedded cluster", - namespaces: []string{"*", "test"}, - want: []string{"*"}, - isEC: true, - }, - { - name: "embedded-cluster install", - namespaces: []string{"test", "abcapp"}, - want: []string{"test", "abcapp", "embedded-cluster", "kube-system", "openebs", "registry", "seaweedfs"}, - isEC: true, - }, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - got := prepareIncludedNamespaces(tt.namespaces, tt.isEC) + got := prepareIncludedNamespaces(tt.namespaces) if !assert.ElementsMatch(t, tt.want, got) { t.Errorf("prepareIncludedNamespaces() = %v, want %v", got, tt.want) } @@ -690,3 +681,186 @@ func Test_instanceBackupLabelSelectors(t *testing.T) { }) } } + +func Test_ecBackupAnnotations(t *testing.T) { + scheme := runtime.NewScheme() + corev1.AddToScheme(scheme) + embeddedclusterv1beta1.AddToScheme(scheme) + + tests := []struct { + name string + kbClient kbclient.Client + in *embeddedclusterv1beta1.Installation + env map[string]string + want map[string]string + }{ + { + name: "basic", + kbClient: fakekbclient.NewClientBuilder().WithScheme(scheme).Build(), + in: &embeddedclusterv1beta1.Installation{}, + env: map[string]string{ + "EMBEDDED_CLUSTER_ID": "embedded-cluster-id", + "EMBEDDED_CLUSTER_VERSION": "embedded-cluster-version", + }, + want: map[string]string{ + "kots.io/embedded-cluster": "true", + "kots.io/embedded-cluster-id": "embedded-cluster-id", + "kots.io/embedded-cluster-version": "embedded-cluster-version", + "kots.io/embedded-cluster-is-ha": "false", + }, + }, + { + name: "online ha", + kbClient: fakekbclient.NewClientBuilder().WithScheme(scheme).Build(), + in: &embeddedclusterv1beta1.Installation{ + Spec: embeddedclusterv1beta1.InstallationSpec{ + HighAvailability: true, + }, + }, + env: map[string]string{ + "EMBEDDED_CLUSTER_ID": "embedded-cluster-id", + "EMBEDDED_CLUSTER_VERSION": "embedded-cluster-version", + }, + want: map[string]string{ + "kots.io/embedded-cluster": "true", + "kots.io/embedded-cluster-id": "embedded-cluster-id", + "kots.io/embedded-cluster-version": "embedded-cluster-version", + "kots.io/embedded-cluster-is-ha": "true", + }, + }, + { + name: "airgap ha", + kbClient: fakekbclient.NewClientBuilder().WithScheme(scheme).WithObjects( + &corev1.Service{ + ObjectMeta: metav1.ObjectMeta{ + Name: embeddedcluster.SeaweedfsS3SVCName, + Namespace: embeddedcluster.SeaweedfsNamespace, + }, + Spec: corev1.ServiceSpec{ + ClusterIP: "10.96.0.10", + }, + }, + ).Build(), + in: &embeddedclusterv1beta1.Installation{ + Spec: embeddedclusterv1beta1.InstallationSpec{ + HighAvailability: true, + AirGap: true, + }, + }, + env: map[string]string{ + "EMBEDDED_CLUSTER_ID": "embedded-cluster-id", + "EMBEDDED_CLUSTER_VERSION": "embedded-cluster-version", + }, + want: map[string]string{ + "kots.io/embedded-cluster": "true", + "kots.io/embedded-cluster-id": "embedded-cluster-id", + "kots.io/embedded-cluster-version": "embedded-cluster-version", + "kots.io/embedded-cluster-is-ha": "true", + "kots.io/embedded-cluster-seaweedfs-s3-ip": "10.96.0.10", + }, + }, + { + name: "with pod and service cidrs", + kbClient: fakekbclient.NewClientBuilder().WithScheme(scheme).Build(), + in: &embeddedclusterv1beta1.Installation{ + Spec: embeddedclusterv1beta1.InstallationSpec{ + Network: &embeddedclusterv1beta1.NetworkSpec{ + PodCIDR: "10.128.0.0/20", + ServiceCIDR: "10.129.0.0/20", + }, + }, + }, + env: map[string]string{ + "EMBEDDED_CLUSTER_ID": "embedded-cluster-id", + "EMBEDDED_CLUSTER_VERSION": "embedded-cluster-version", + }, + want: map[string]string{ + "kots.io/embedded-cluster": "true", + "kots.io/embedded-cluster-id": "embedded-cluster-id", + "kots.io/embedded-cluster-version": "embedded-cluster-version", + "kots.io/embedded-cluster-is-ha": "false", + "kots.io/embedded-cluster-pod-cidr": "10.128.0.0/20", + "kots.io/embedded-cluster-service-cidr": "10.129.0.0/20", + }, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + req := require.New(t) + for k, v := range tt.env { + t.Setenv(k, v) + } + got, err := ecBackupAnnotations(context.TODO(), tt.kbClient, tt.in) + req.NoError(err) + req.Equal(tt.want, got) + }) + } +} + +func Test_ecIncludedNamespaces(t *testing.T) { + tests := []struct { + name string + in *embeddedclusterv1beta1.Installation + want []string + }{ + { + name: "online", + in: &embeddedclusterv1beta1.Installation{}, + want: []string{ + "embedded-cluster", + "kube-system", + "openebs", + }, + }, + { + name: "online ha", + in: &embeddedclusterv1beta1.Installation{ + Spec: embeddedclusterv1beta1.InstallationSpec{ + HighAvailability: true, + }, + }, + want: []string{ + "embedded-cluster", + "kube-system", + "openebs", + }, + }, + { + name: "airgap", + in: &embeddedclusterv1beta1.Installation{ + Spec: embeddedclusterv1beta1.InstallationSpec{ + AirGap: true, + }, + }, + want: []string{ + "embedded-cluster", + "kube-system", + "openebs", + "registry", + }, + }, + { + name: "airgap ha", + in: &embeddedclusterv1beta1.Installation{ + Spec: embeddedclusterv1beta1.InstallationSpec{ + HighAvailability: true, + AirGap: true, + }, + }, + want: []string{ + "embedded-cluster", + "kube-system", + "openebs", + "registry", + "seaweedfs", + }, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + req := require.New(t) + got := ecIncludedNamespaces(tt.in) + req.Equal(tt.want, got) + }) + } +} From 3e5b5e543f405e6ff5d900ad441f6dc8a6e303de Mon Sep 17 00:00:00 2001 From: Salah Al Saleh Date: Fri, 26 Jul 2024 11:24:18 -0700 Subject: [PATCH 008/123] Init Helm capabilities in upgrade service (#4783) * Init Helm capabilities in upgrade service * init in bootstrap --- pkg/upgradeservice/bootstrap.go | 8 ++++++++ pkg/upgradeservice/server.go | 4 ---- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/pkg/upgradeservice/bootstrap.go b/pkg/upgradeservice/bootstrap.go index 7109de06f6..954f520831 100644 --- a/pkg/upgradeservice/bootstrap.go +++ b/pkg/upgradeservice/bootstrap.go @@ -9,17 +9,25 @@ import ( "github.com/pkg/errors" "github.com/replicatedhq/kots/pkg/archives" + "github.com/replicatedhq/kots/pkg/k8sutil" identity "github.com/replicatedhq/kots/pkg/kotsadmidentity" "github.com/replicatedhq/kots/pkg/kotsutil" "github.com/replicatedhq/kots/pkg/logger" "github.com/replicatedhq/kots/pkg/pull" registrytypes "github.com/replicatedhq/kots/pkg/registry/types" + upgradepreflight "github.com/replicatedhq/kots/pkg/upgradeservice/preflight" "github.com/replicatedhq/kots/pkg/upgradeservice/task" "github.com/replicatedhq/kots/pkg/upgradeservice/types" "github.com/replicatedhq/kots/pkg/util" ) func bootstrap(params types.UpgradeServiceParams) (finalError error) { + if err := k8sutil.InitHelmCapabilities(); err != nil { + return errors.Wrap(err, "failed to init helm capabilities") + } + if err := upgradepreflight.Init(); err != nil { + return errors.Wrap(err, "failed to init preflight") + } if params.AppIsAirgap { if err := pullArchiveFromAirgap(params); err != nil { return errors.Wrap(err, "failed to pull archive from airgap") diff --git a/pkg/upgradeservice/server.go b/pkg/upgradeservice/server.go index 08899e6627..914249c4ab 100644 --- a/pkg/upgradeservice/server.go +++ b/pkg/upgradeservice/server.go @@ -30,10 +30,6 @@ func Serve(params types.UpgradeServiceParams) error { return errors.Wrap(err, "failed to bootstrap") } - if err := upgradepreflight.Init(); err != nil { - return errors.Wrap(err, "failed to init preflight") - } - r := mux.NewRouter() r.Use(handlers.ParamsMiddleware(params)) From 6c4d902c26b333ba858dcf055bc55dd7e1b4069d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 27 Jul 2024 12:10:38 +0000 Subject: [PATCH 009/123] Bump the security group with 3 updates (#4786) Bumps the security group with 3 updates: [github.com/onsi/ginkgo/v2](https://github.com/onsi/ginkgo), [github.com/onsi/gomega](https://github.com/onsi/gomega) and [github.com/replicatedhq/embedded-cluster-kinds](https://github.com/replicatedhq/embedded-cluster-kinds). Updates `github.com/onsi/ginkgo/v2` from 2.19.0 to 2.19.1 - [Release notes](https://github.com/onsi/ginkgo/releases) - [Changelog](https://github.com/onsi/ginkgo/blob/master/CHANGELOG.md) - [Commits](https://github.com/onsi/ginkgo/compare/v2.19.0...v2.19.1) Updates `github.com/onsi/gomega` from 1.33.1 to 1.34.0 - [Release notes](https://github.com/onsi/gomega/releases) - [Changelog](https://github.com/onsi/gomega/blob/master/CHANGELOG.md) - [Commits](https://github.com/onsi/gomega/compare/v1.33.1...v1.34.0) Updates `github.com/replicatedhq/embedded-cluster-kinds` from 1.4.6 to 1.4.7 - [Commits](https://github.com/replicatedhq/embedded-cluster-kinds/compare/v1.4.6...v1.4.7) --- updated-dependencies: - dependency-name: github.com/onsi/ginkgo/v2 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: security - dependency-name: github.com/onsi/gomega dependency-type: direct:production update-type: version-update:semver-minor dependency-group: security - dependency-name: github.com/replicatedhq/embedded-cluster-kinds dependency-type: direct:production update-type: version-update:semver-patch dependency-group: security ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- go.mod | 6 +++--- go.sum | 12 ++++++------ 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/go.mod b/go.mod index 9f53a709eb..eed1bf1659 100644 --- a/go.mod +++ b/go.mod @@ -39,8 +39,8 @@ require ( github.com/mholt/archiver/v3 v3.5.1 github.com/mikesmitty/edkey v0.0.0-20170222072505-3356ea4e686a github.com/mitchellh/hashstructure v1.1.0 - github.com/onsi/ginkgo/v2 v2.19.0 - github.com/onsi/gomega v1.33.1 + github.com/onsi/ginkgo/v2 v2.19.1 + github.com/onsi/gomega v1.34.0 github.com/open-policy-agent/opa v0.65.0 github.com/opencontainers/image-spec v1.1.0 github.com/ory/dockertest/v3 v3.10.0 @@ -48,7 +48,7 @@ require ( github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5 github.com/pkg/errors v0.9.1 github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 - github.com/replicatedhq/embedded-cluster-kinds v1.4.6 + github.com/replicatedhq/embedded-cluster-kinds v1.4.7 github.com/replicatedhq/kotskinds v0.0.0-20240621084729-1eb1e3eac6f2 github.com/replicatedhq/kurlkinds v1.5.0 github.com/replicatedhq/troubleshoot v0.95.1 diff --git a/go.sum b/go.sum index a75be5df1c..c9edd4fb7c 100644 --- a/go.sum +++ b/go.sum @@ -1214,15 +1214,15 @@ github.com/onsi/ginkgo v1.10.1/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+ github.com/onsi/ginkgo v1.11.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE= github.com/onsi/ginkgo v1.16.5/go.mod h1:+E8gABHa3K6zRBolWtd+ROzc/U5bkGt0FwiG042wbpU= -github.com/onsi/ginkgo/v2 v2.19.0 h1:9Cnnf7UHo57Hy3k6/m5k3dRfGTMXGvxhHFvkDTCTpvA= -github.com/onsi/ginkgo/v2 v2.19.0/go.mod h1:rlwLi9PilAFJ8jCg9UE1QP6VBpd6/xj3SRC0d6TU0To= +github.com/onsi/ginkgo/v2 v2.19.1 h1:QXgq3Z8Crl5EL1WBAC98A5sEBHARrAJNzAmMxzLcRF0= +github.com/onsi/ginkgo/v2 v2.19.1/go.mod h1:O3DtEWQkPa/F7fBMgmZQKKsluAy8pd3rEQdrjkPb9zA= github.com/onsi/gomega v0.0.0-20170829124025-dcabb60a477c/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= github.com/onsi/gomega v1.3.0/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= github.com/onsi/gomega v1.4.2/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= github.com/onsi/gomega v1.5.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= github.com/onsi/gomega v1.7.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= -github.com/onsi/gomega v1.33.1 h1:dsYjIxxSR755MDmKVsaFQTE22ChNBcuuTWgkUDSubOk= -github.com/onsi/gomega v1.33.1/go.mod h1:U4R44UsT+9eLIaYRB2a5qajjtQYn0hauxvRm16AVYg0= +github.com/onsi/gomega v1.34.0 h1:eSSPsPNp6ZpsG8X1OVmOTxig+CblTc4AxpPBykhe2Os= +github.com/onsi/gomega v1.34.0/go.mod h1:MIKI8c+f+QLWk+hxbePD4i0LMJSExPaZOVfkoex4cAo= github.com/open-policy-agent/opa v0.65.0 h1:wnEU0pEk80YjFi3yoDbFTMluyNssgPI4VJNJetD9a4U= github.com/open-policy-agent/opa v0.65.0/go.mod h1:CNoLL44LuCH1Yot/zoeZXRKFylQtCJV+oGFiP2TeeEc= github.com/opencontainers/go-digest v1.0.0-rc1/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s= @@ -1311,8 +1311,8 @@ github.com/redis/go-redis/v9 v9.0.5/go.mod h1:WqMKv5vnQbRuZstUwxQI195wHy+t4PuXDO github.com/redis/go-redis/v9 v9.5.1 h1:H1X4D3yHPaYrkL5X06Wh6xNVM/pX0Ft4RV0vMGvLBh8= github.com/redis/go-redis/v9 v9.5.1/go.mod h1:hdY0cQFCN4fnSYT6TkisLufl/4W5UIXyv0b/CLO2V2M= github.com/remyoudompheng/bigfft v0.0.0-20170806203942-52369c62f446/go.mod h1:uYEyJGbgTkfkS4+E/PavXkNJcbFIpEtjt2B0KDQ5+9M= -github.com/replicatedhq/embedded-cluster-kinds v1.4.6 h1:nP2/ANhUW1omiPp3WFm6tQWkLy9fAA4JPveazg8LlTU= -github.com/replicatedhq/embedded-cluster-kinds v1.4.6/go.mod h1:AwopUvvGcaWO4mn9DkbPj5RnLuOy756CNLrcaAlmjMo= +github.com/replicatedhq/embedded-cluster-kinds v1.4.7 h1:CR55z8Q2ek90BwwwOEz+P3qFIgc84G7wp/FNs+ctfsw= +github.com/replicatedhq/embedded-cluster-kinds v1.4.7/go.mod h1:AwopUvvGcaWO4mn9DkbPj5RnLuOy756CNLrcaAlmjMo= github.com/replicatedhq/kotskinds v0.0.0-20240621084729-1eb1e3eac6f2 h1:xL4u2RHhMaGDgz7Lol5MhVYLnWahV3sCJZbfebpPao0= github.com/replicatedhq/kotskinds v0.0.0-20240621084729-1eb1e3eac6f2/go.mod h1:QjhIUu3+OmHZ09u09j3FCoTt8F3BYtQglS+OLmftu9I= github.com/replicatedhq/kurlkinds v1.5.0 h1:zZ0PKNeh4kXvSzVGkn62DKTo314GxhXg1TSB3azURMc= From 8c9fe727d89122d97b4d249e01db13cfab8a42a6 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 27 Jul 2024 18:07:46 +0000 Subject: [PATCH 010/123] Bump diff from 4.0.2 to 5.2.0 in /web (#4785) Bumps [diff](https://github.com/kpdecker/jsdiff) from 4.0.2 to 5.2.0. - [Changelog](https://github.com/kpdecker/jsdiff/blob/master/release-notes.md) - [Commits](https://github.com/kpdecker/jsdiff/compare/v4.0.2...v5.2.0) --- updated-dependencies: - dependency-name: diff dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- web/package.json | 2 +- web/yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/web/package.json b/web/package.json index 6129e11ed5..5ba8b1222c 100644 --- a/web/package.json +++ b/web/package.json @@ -139,7 +139,7 @@ "clipboard": "2.0.11", "cronstrue": "^2.50.0", "dayjs": "1.11.12", - "diff": "^4.0.2", + "diff": "^5.2.0", "downloadjs": "^1.4.7", "file-loader": "^6.2.0", "file-saver": "^2.0.2", diff --git a/web/yarn.lock b/web/yarn.lock index 4315cdd6f2..6c0c6a2945 100644 --- a/web/yarn.lock +++ b/web/yarn.lock @@ -7756,10 +7756,10 @@ diff-sequences@^29.6.3: resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-29.6.3.tgz#4deaf894d11407c51efc8418012f9e70b84ea921" integrity sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q== -diff@^4.0.2: - version "4.0.2" - resolved "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz" - integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== +diff@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/diff/-/diff-5.2.0.tgz#26ded047cd1179b78b9537d5ef725503ce1ae531" + integrity sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A== diffie-hellman@^5.0.0: version "5.0.3" From 0e70faf1abe19a35b89910be1eaf962239c86322 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 28 Jul 2024 00:26:45 +0000 Subject: [PATCH 011/123] Bump github.com/open-policy-agent/opa from 0.65.0 to 0.67.0 (#4787) Bumps [github.com/open-policy-agent/opa](https://github.com/open-policy-agent/opa) from 0.65.0 to 0.67.0. - [Release notes](https://github.com/open-policy-agent/opa/releases) - [Changelog](https://github.com/open-policy-agent/opa/blob/main/CHANGELOG.md) - [Commits](https://github.com/open-policy-agent/opa/compare/v0.65.0...v0.67.0) --- updated-dependencies: - dependency-name: github.com/open-policy-agent/opa dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- go.mod | 31 +++++++++++++------------- go.sum | 70 ++++++++++++++++++++++++++++++---------------------------- 2 files changed, 52 insertions(+), 49 deletions(-) diff --git a/go.mod b/go.mod index eed1bf1659..009a874af8 100644 --- a/go.mod +++ b/go.mod @@ -41,7 +41,7 @@ require ( github.com/mitchellh/hashstructure v1.1.0 github.com/onsi/ginkgo/v2 v2.19.1 github.com/onsi/gomega v1.34.0 - github.com/open-policy-agent/opa v0.65.0 + github.com/open-policy-agent/opa v0.67.0 github.com/opencontainers/image-spec v1.1.0 github.com/ory/dockertest/v3 v3.10.0 github.com/otiai10/copy v1.14.0 @@ -141,13 +141,13 @@ require ( github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d // indirect github.com/blang/semver/v4 v4.0.0 // indirect github.com/bshuster-repo/logrus-logstash-hook v1.0.0 // indirect - github.com/cenkalti/backoff/v4 v4.2.1 // indirect + github.com/cenkalti/backoff/v4 v4.3.0 // indirect github.com/cespare/xxhash/v2 v2.3.0 // indirect github.com/chai2010/gettext-go v1.0.2 // indirect github.com/chzyer/readline v1.5.1 // indirect github.com/cloudflare/circl v1.3.7 // indirect github.com/containerd/cgroups/v3 v3.0.3 // indirect - github.com/containerd/containerd v1.7.17 // indirect + github.com/containerd/containerd v1.7.20 // indirect github.com/containerd/continuity v0.4.2 // indirect github.com/containerd/errdefs v0.1.0 // indirect github.com/containerd/log v0.1.0 // indirect @@ -222,7 +222,7 @@ require ( github.com/gorilla/handlers v1.5.2 // indirect github.com/gosimple/unidecode v1.0.1 // indirect github.com/gosuri/uitable v0.0.4 // indirect - github.com/grpc-ecosystem/grpc-gateway/v2 v2.19.1 // indirect + github.com/grpc-ecosystem/grpc-gateway/v2 v2.20.0 // indirect github.com/hailocab/go-hostpool v0.0.0-20160125115350-e80d13ce29ed // indirect github.com/hashicorp/errwrap v1.1.0 // indirect github.com/hashicorp/go-getter v1.7.5 // indirect @@ -348,21 +348,21 @@ require ( go.opencensus.io v0.24.0 // indirect go.opentelemetry.io/contrib/exporters/autoexport v0.46.1 // indirect go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.49.0 // indirect - go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0 // indirect - go.opentelemetry.io/otel v1.27.0 // indirect + go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.53.0 // indirect + go.opentelemetry.io/otel v1.28.0 // indirect go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v0.44.0 // indirect go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v0.44.0 // indirect - go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.22.0 // indirect - go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.21.0 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.28.0 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.28.0 // indirect go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.21.0 // indirect go.opentelemetry.io/otel/exporters/prometheus v0.44.0 // indirect go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v0.44.0 // indirect go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.21.0 // indirect - go.opentelemetry.io/otel/metric v1.27.0 // indirect - go.opentelemetry.io/otel/sdk v1.27.0 // indirect + go.opentelemetry.io/otel/metric v1.28.0 // indirect + go.opentelemetry.io/otel/sdk v1.28.0 // indirect go.opentelemetry.io/otel/sdk/metric v1.27.0 // indirect - go.opentelemetry.io/otel/trace v1.27.0 // indirect - go.opentelemetry.io/proto/otlp v1.0.0 // indirect + go.opentelemetry.io/otel/trace v1.28.0 // indirect + go.opentelemetry.io/proto/otlp v1.3.1 // indirect go.starlark.net v0.0.0-20230525235612-a134d8f9ddca // indirect golang.org/x/exp v0.0.0-20240506185415-9bf2ced13842 // indirect golang.org/x/mod v0.18.0 // indirect @@ -373,9 +373,9 @@ require ( golang.org/x/time v0.5.0 // indirect golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d // indirect google.golang.org/genproto v0.0.0-20240311173647-c811ad7063a7 // indirect - google.golang.org/genproto/googleapis/api v0.0.0-20240318140521-94a12d6c2237 // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20240415180920-8c6c420018be // indirect - google.golang.org/grpc v1.64.1 // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20240701130421-f6361c86f094 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20240701130421-f6361c86f094 // indirect + google.golang.org/grpc v1.65.0 // indirect google.golang.org/protobuf v1.34.2 // indirect gopkg.in/evanphx/json-patch.v5 v5.6.0 // indirect gopkg.in/go-jose/go-jose.v2 v2.6.3 // indirect @@ -399,6 +399,7 @@ require ( cloud.google.com/go/auth/oauth2adapt v0.2.1 // indirect github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2 // indirect github.com/c9s/goprocinfo v0.0.0-20190309065803-0b2ad9ac246b // indirect + github.com/containerd/platforms v0.2.1 // indirect github.com/containers/storage v1.54.0 // indirect github.com/go-logr/zapr v1.3.0 // indirect github.com/go-task/slim-sprig/v3 v3.0.0 // indirect diff --git a/go.sum b/go.sum index c9edd4fb7c..9c33802fbb 100644 --- a/go.sum +++ b/go.sum @@ -369,8 +369,8 @@ github.com/bytecodealliance/wasmtime-go/v3 v3.0.2/go.mod h1:RnUjnIXxEJcL6BgCvNyz github.com/c9s/goprocinfo v0.0.0-20170724085704-0010a05ce49f/go.mod h1:uEyr4WpAH4hio6LFriaPkL938XnrvLpNPmQHBdrmbIE= github.com/c9s/goprocinfo v0.0.0-20190309065803-0b2ad9ac246b h1:4yfM1Zm+7U+m0inJ0g6JvdqGePXD8eG4nXUTbcLT6gk= github.com/c9s/goprocinfo v0.0.0-20190309065803-0b2ad9ac246b/go.mod h1:uEyr4WpAH4hio6LFriaPkL938XnrvLpNPmQHBdrmbIE= -github.com/cenkalti/backoff/v4 v4.2.1 h1:y4OZtCnogmCPw98Zjyt5a6+QwPLGkiQsYW5oUqylYbM= -github.com/cenkalti/backoff/v4 v4.2.1/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE= +github.com/cenkalti/backoff/v4 v4.3.0 h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK343L8= +github.com/cenkalti/backoff/v4 v4.3.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/cespare/xxhash v1.1.0 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko= github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= @@ -408,14 +408,16 @@ github.com/cockroachdb/apd v1.1.0/go.mod h1:8Sl8LxpKi29FqWXR16WEFZRNSz3SoPzUzeMe github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8= github.com/containerd/cgroups/v3 v3.0.3 h1:S5ByHZ/h9PMe5IOQoN7E+nMc2UcLEM/V48DGDJ9kip0= github.com/containerd/cgroups/v3 v3.0.3/go.mod h1:8HBe7V3aWGLFPd/k03swSIsGjZhHI2WzJmticMgVuz0= -github.com/containerd/containerd v1.7.17 h1:KjNnn0+tAVQHAoaWRjmdak9WlvnFR/8rU1CHHy8Rm2A= -github.com/containerd/containerd v1.7.17/go.mod h1:vK+hhT4TIv2uejlcDlbVIc8+h/BqtKLIyNrtCZol8lI= +github.com/containerd/containerd v1.7.20 h1:Sl6jQYk3TRavaU83h66QMbI2Nqg9Jm6qzwX57Vsn1SQ= +github.com/containerd/containerd v1.7.20/go.mod h1:52GsS5CwquuqPuLncsXwG0t2CiUce+KsNHJZQJvAgR0= github.com/containerd/continuity v0.4.2 h1:v3y/4Yz5jwnvqPKJJ+7Wf93fyWoCB3F5EclWG023MDM= github.com/containerd/continuity v0.4.2/go.mod h1:F6PTNCKepoxEaXLQp3wDAjygEnImnZ/7o4JzpodfroQ= github.com/containerd/errdefs v0.1.0 h1:m0wCRBiu1WJT/Fr+iOoQHMQS/eP5myQ8lCv4Dz5ZURM= github.com/containerd/errdefs v0.1.0/go.mod h1:YgWiiHtLmSeBrvpw+UfPijzbLaB77mEG1WwJTDETIV0= github.com/containerd/log v0.1.0 h1:TCJt7ioM2cr/tfR8GPbGf9/VRAX8D2B4PjzCpfX540I= github.com/containerd/log v0.1.0/go.mod h1:VRRf09a7mHDIRezVKTRCrOq78v577GXq3bSa3EhrzVo= +github.com/containerd/platforms v0.2.1 h1:zvwtM3rz2YHPQsF2CHYM8+KtB5dvhISiXh5ZpSBQv6A= +github.com/containerd/platforms v0.2.1/go.mod h1:XHCb+2/hzowdiut9rkudds9bE5yJ7npe7dG/wG+uFPw= github.com/containerd/stargz-snapshotter/estargz v0.15.1 h1:eXJjw9RbkLFgioVaTG+G/ZW/0kEe2oEKCdS/ZxIyoCU= github.com/containerd/stargz-snapshotter/estargz v0.15.1/go.mod h1:gr2RNwukQ/S9Nv33Lt6UC7xEx58C+LHRdoqbEKjz1Kk= github.com/containers/image/v5 v5.31.1 h1:3x9soI6Biml/GiDLpkSmKrkRSwVGctxu/vONpoUdklA= @@ -704,8 +706,8 @@ github.com/golang-sql/civil v0.0.0-20220223132316-b832511892a9/go.mod h1:8vg3r2V github.com/golang-sql/sqlexp v0.1.0 h1:ZCD6MBpcuOVfGVqsEmY5/4FtYiKz6tSyUv9LPEDei6A= github.com/golang-sql/sqlexp v0.1.0/go.mod h1:J4ad9Vo8ZCWQ2GMrC4UCQy1JpCbwU9m3EOqtpKwwwHI= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= -github.com/golang/glog v1.2.0 h1:uCdmnmatrKCgMBlM4rMuJZWOkPDqdbZPnrMXDY4gI68= -github.com/golang/glog v1.2.0/go.mod h1:6AhwSGph0fcJtXVM/PEHPqZlFeoLxhs7/t5UDAwmO+w= +github.com/golang/glog v1.2.1 h1:OptwRhECazUx5ix5TTWC3EZhsZEHWcYWY4FQHTIubm4= +github.com/golang/glog v1.2.1/go.mod h1:6AhwSGph0fcJtXVM/PEHPqZlFeoLxhs7/t5UDAwmO+w= github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20180513044358-24b0969c4cb7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= @@ -889,8 +891,8 @@ github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgf github.com/grpc-ecosystem/grpc-gateway v1.3.0/go.mod h1:RSKVYQBd5MCa4OVpNdGskqpgL2+G+NZTnrVHpWWfpdw= github.com/grpc-ecosystem/grpc-gateway v1.9.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= -github.com/grpc-ecosystem/grpc-gateway/v2 v2.19.1 h1:/c3QmbOGMGTOumP2iT/rCwB7b0QDGLKzqOmktBjT+Is= -github.com/grpc-ecosystem/grpc-gateway/v2 v2.19.1/go.mod h1:5SN9VR2LTsRFsrEC6FHgRbTWrTHu6tqPeKxEQv15giM= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.20.0 h1:bkypFPDjIYGfCYD5mRBvpqxfYX1YCS1PXdKYWi8FsN0= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.20.0/go.mod h1:P+Lt/0by1T8bfcF3z737NnSbmxQAppXMRziHUxPOC8k= github.com/hailocab/go-hostpool v0.0.0-20160125115350-e80d13ce29ed h1:5upAirOpQc1Q53c0bnx2ufif5kANL7bfZWcc6VJWJd8= github.com/hailocab/go-hostpool v0.0.0-20160125115350-e80d13ce29ed/go.mod h1:tMWxXQ9wFIaZeTI9F+hmhFiGpFmhOHzyShyFUhRm0H4= github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= @@ -1223,8 +1225,8 @@ github.com/onsi/gomega v1.5.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1Cpa github.com/onsi/gomega v1.7.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= github.com/onsi/gomega v1.34.0 h1:eSSPsPNp6ZpsG8X1OVmOTxig+CblTc4AxpPBykhe2Os= github.com/onsi/gomega v1.34.0/go.mod h1:MIKI8c+f+QLWk+hxbePD4i0LMJSExPaZOVfkoex4cAo= -github.com/open-policy-agent/opa v0.65.0 h1:wnEU0pEk80YjFi3yoDbFTMluyNssgPI4VJNJetD9a4U= -github.com/open-policy-agent/opa v0.65.0/go.mod h1:CNoLL44LuCH1Yot/zoeZXRKFylQtCJV+oGFiP2TeeEc= +github.com/open-policy-agent/opa v0.67.0 h1:FOdsO9yNhfmrh+72oVK7ImWmzruG+VSpfbr5IBqEWVs= +github.com/open-policy-agent/opa v0.67.0/go.mod h1:aqKlHc8E2VAAylYE9x09zJYr/fYzGX+JKne89UGqFzk= github.com/opencontainers/go-digest v1.0.0-rc1/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s= github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U= github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM= @@ -1335,8 +1337,8 @@ github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6L 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= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= -github.com/rogpeppe/go-internal v1.11.0 h1:cWPaGQEPrBb5/AsnsZesgZZ9yb1OQ+GOISoDNXVBh4M= -github.com/rogpeppe/go-internal v1.11.0/go.mod h1:ddIwULY96R17DhadqLgMfk9H9tvdUzkipdSkR5nkCZA= +github.com/rogpeppe/go-internal v1.12.0 h1:exVL4IDcn6na9z1rAb56Vxr+CgyK3nn3O+epU5NdKM8= +github.com/rogpeppe/go-internal v1.12.0/go.mod h1:E+RYuTGaKKdloAfM02xzb0FW3Paa99yedzYV+kq4uf4= github.com/rqlite/gorqlite v0.0.0-20221028154453-256f31831ff3 h1:lkui3fRWN9cUFDrsT0ym2fojX+W9y8W/9DtXSquzWlQ= github.com/rqlite/gorqlite v0.0.0-20221028154453-256f31831ff3/go.mod h1:xF/KoXmrRyahPfo5L7Szb5cAAUl53dMWBh9cMruGEZg= github.com/rs/xid v1.2.1/go.mod h1:+uKXf+4Djp6Md1KODXJxgGQPKngRmWyn10oCKFzNHOQ= @@ -1544,18 +1546,18 @@ go.opentelemetry.io/contrib/exporters/autoexport v0.46.1 h1:ysCfPZB9AjUlMa1UHYup go.opentelemetry.io/contrib/exporters/autoexport v0.46.1/go.mod h1:ha0aiYm+DOPsLHjh0zoQ8W8sLT+LJ58J3j47lGpSLrU= go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.49.0 h1:4Pp6oUg3+e/6M4C0A/3kJ2VYa++dsWVTtGgLVj5xtHg= go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.49.0/go.mod h1:Mjt1i1INqiaoZOMGR1RIUJN+i3ChKoFRqzrRQhlkbs0= -go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0 h1:jq9TW8u3so/bN+JPT166wjOI6/vQPF6Xe7nMNIltagk= -go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0/go.mod h1:p8pYQP+m5XfbZm9fxtSKAbM6oIllS7s2AfxrChvc7iw= -go.opentelemetry.io/otel v1.27.0 h1:9BZoF3yMK/O1AafMiQTVu0YDj5Ea4hPhxCs7sGva+cg= -go.opentelemetry.io/otel v1.27.0/go.mod h1:DMpAK8fzYRzs+bi3rS5REupisuqTheUlSZJ1WnZaPAQ= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.53.0 h1:4K4tsIXefpVJtvA/8srF4V4y0akAoPHkIslgAkjixJA= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.53.0/go.mod h1:jjdQuTGVsXV4vSs+CJ2qYDeDPf9yIJV23qlIzBm73Vg= +go.opentelemetry.io/otel v1.28.0 h1:/SqNcYk+idO0CxKEUOtKQClMK/MimZihKYMruSMViUo= +go.opentelemetry.io/otel v1.28.0/go.mod h1:q68ijF8Fc8CnMHKyzqL6akLO46ePnjkgfIMIjUIX9z4= go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v0.44.0 h1:jd0+5t/YynESZqsSyPz+7PAFdEop0dlN0+PkyHYo8oI= go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v0.44.0/go.mod h1:U707O40ee1FpQGyhvqnzmCJm1Wh6OX6GGBVn0E6Uyyk= go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v0.44.0 h1:bflGWrfYyuulcdxf14V6n9+CoQcu5SAAdHmDPAJnlps= go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v0.44.0/go.mod h1:qcTO4xHAxZLaLxPd60TdE88rxtItPHgHWqOhOGRr0as= -go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.22.0 h1:9M3+rhx7kZCIQQhQRYaZCdNu1V73tm4TvXs2ntl98C4= -go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.22.0/go.mod h1:noq80iT8rrHP1SfybmPiRGc9dc5M8RPmGvtwo7Oo7tc= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.21.0 h1:tIqheXEFWAZ7O8A7m+J0aPTmpJN3YQ7qetUAdkkkKpk= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.21.0/go.mod h1:nUeKExfxAQVbiVFn32YXpXZZHZ61Cc3s3Rn1pDBGAb0= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.28.0 h1:3Q/xZUyC1BBkualc9ROb4G8qkH90LXEIICcs5zv1OYY= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.28.0/go.mod h1:s75jGIWA9OfCMzF0xr+ZgfrB5FEbbV7UuYo32ahUiFI= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.28.0 h1:R3X6ZXmNPRR8ul6i3WgFURCHzaXjHdm0karRG/+dj3s= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.28.0/go.mod h1:QWFXnDavXWwMx2EEcZsf3yxgEKAqsxQ+Syjp+seyInw= go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.21.0 h1:digkEZCJWobwBqMwC0cwCq8/wkkRy/OowZg5OArWZrM= go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.21.0/go.mod h1:/OpE/y70qVkndM0TrxT4KBoN3RsFZP0QaofcfYrj76I= go.opentelemetry.io/otel/exporters/prometheus v0.44.0 h1:08qeJgaPC0YEBu2PQMbqU3rogTlyzpjhCI2b58Yn00w= @@ -1564,17 +1566,17 @@ go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v0.44.0 h1:dEZWPjVN22urgY go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v0.44.0/go.mod h1:sTt30Evb7hJB/gEk27qLb1+l9n4Tb8HvHkR0Wx3S6CU= go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.21.0 h1:VhlEQAPp9R1ktYfrPk5SOryw1e9LDDTZCbIPFrho0ec= go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.21.0/go.mod h1:kB3ufRbfU+CQ4MlUcqtW8Z7YEOBeK2DJ6CmR5rYYF3E= -go.opentelemetry.io/otel/metric v1.27.0 h1:hvj3vdEKyeCi4YaYfNjv2NUje8FqKqUY8IlF0FxV/ik= -go.opentelemetry.io/otel/metric v1.27.0/go.mod h1:mVFgmRlhljgBiuk/MP/oKylr4hs85GZAylncepAX/ak= -go.opentelemetry.io/otel/sdk v1.27.0 h1:mlk+/Y1gLPLn84U4tI8d3GNJmGT/eXe3ZuOXN9kTWmI= -go.opentelemetry.io/otel/sdk v1.27.0/go.mod h1:Ha9vbLwJE6W86YstIywK2xFfPjbWlCuwPtMkKdz/Y4A= +go.opentelemetry.io/otel/metric v1.28.0 h1:f0HGvSl1KRAU1DLgLGFjrwVyismPlnuU6JD6bOeuA5Q= +go.opentelemetry.io/otel/metric v1.28.0/go.mod h1:Fb1eVBFZmLVTMb6PPohq3TO9IIhUisDsbJoL/+uQW4s= +go.opentelemetry.io/otel/sdk v1.28.0 h1:b9d7hIry8yZsgtbmM0DKyPWMMUMlK9NEKuIG4aBqWyE= +go.opentelemetry.io/otel/sdk v1.28.0/go.mod h1:oYj7ClPUA7Iw3m+r7GeEjz0qckQRJK2B8zjcZEfu7Pg= go.opentelemetry.io/otel/sdk/metric v1.27.0 h1:5uGNOlpXi+Hbo/DRoI31BSb1v+OGcpv2NemcCrOL8gI= go.opentelemetry.io/otel/sdk/metric v1.27.0/go.mod h1:we7jJVrYN2kh3mVBlswtPU22K0SA+769l93J6bsyvqw= -go.opentelemetry.io/otel/trace v1.27.0 h1:IqYb813p7cmbHk0a5y6pD5JPakbVfftRXABGt5/Rscw= -go.opentelemetry.io/otel/trace v1.27.0/go.mod h1:6RiD1hkAprV4/q+yd2ln1HG9GoPx39SuvvstaLBl+l4= +go.opentelemetry.io/otel/trace v1.28.0 h1:GhQ9cUuQGmNDd5BTCP2dAvv75RdMxEfTmYejp+lkx9g= +go.opentelemetry.io/otel/trace v1.28.0/go.mod h1:jPyXzNPg6da9+38HEwElrQiHlVMTnVfM3/yv2OlIHaI= go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= -go.opentelemetry.io/proto/otlp v1.0.0 h1:T0TX0tmXU8a3CbNXzEKGeU5mIVOdf0oykP+u2lIVU/I= -go.opentelemetry.io/proto/otlp v1.0.0/go.mod h1:Sy6pihPLfYHkr3NkUbEhGHFhINUSI/v80hjKIs5JXpM= +go.opentelemetry.io/proto/otlp v1.3.1 h1:TrMUixzpM0yuc/znrFTP9MMRh8trP93mkCiDVeXrui0= +go.opentelemetry.io/proto/otlp v1.3.1/go.mod h1:0X1WI4de4ZsLrrJNLAQbFeLCm3T7yBkR0XqQ7niQU+8= go.starlark.net v0.0.0-20230525235612-a134d8f9ddca h1:VdD38733bfYv5tUZwEIskMM93VanwNIi5bIKnDrJdEY= go.starlark.net v0.0.0-20230525235612-a134d8f9ddca/go.mod h1:jxU+3+j+71eXOW14274+SmmuW82qJzl6iZSeqEtTGds= go.uber.org/atomic v0.0.0-20181018215023-8dc6146f7569/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= @@ -2193,10 +2195,10 @@ google.golang.org/genproto v0.0.0-20221014213838-99cd37c6964a/go.mod h1:1vXfmgAz google.golang.org/genproto v0.0.0-20221025140454-527a21cfbd71/go.mod h1:9qHF0xnpdSfF6knlcsnpzUu5y+rpwgbvsyGAZPBMg4s= google.golang.org/genproto v0.0.0-20240311173647-c811ad7063a7 h1:ImUcDPHjTrAqNhlOkSocDLfG9rrNHH7w7uoKWPaWZ8s= google.golang.org/genproto v0.0.0-20240311173647-c811ad7063a7/go.mod h1:/3XmxOjePkvmKrHuBy4zNFw7IzxJXtAgdpXi8Ll990U= -google.golang.org/genproto/googleapis/api v0.0.0-20240318140521-94a12d6c2237 h1:RFiFrvy37/mpSpdySBDrUdipW/dHwsRwh3J3+A9VgT4= -google.golang.org/genproto/googleapis/api v0.0.0-20240318140521-94a12d6c2237/go.mod h1:Z5Iiy3jtmioajWHDGFk7CeugTyHtPvMHA4UTmUkyalE= -google.golang.org/genproto/googleapis/rpc v0.0.0-20240415180920-8c6c420018be h1:LG9vZxsWGOmUKieR8wPAUR3u3MpnYFQZROPIMaXh7/A= -google.golang.org/genproto/googleapis/rpc v0.0.0-20240415180920-8c6c420018be/go.mod h1:WtryC6hu0hhx87FDGxWCDptyssuo68sk10vYjF+T9fY= +google.golang.org/genproto/googleapis/api v0.0.0-20240701130421-f6361c86f094 h1:0+ozOGcrp+Y8Aq8TLNN2Aliibms5LEzsq99ZZmAGYm0= +google.golang.org/genproto/googleapis/api v0.0.0-20240701130421-f6361c86f094/go.mod h1:fJ/e3If/Q67Mj99hin0hMhiNyCRmt6BQ2aWIJshUSJw= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240701130421-f6361c86f094 h1:BwIjyKYGsK9dMCBOorzRri8MQwmi7mT9rGHsCEinZkA= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240701130421-f6361c86f094/go.mod h1:Ue6ibwXGpU+dqIcODieyLOcgj7z8+IcskoNIgZxtrFY= 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.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= @@ -2233,8 +2235,8 @@ google.golang.org/grpc v1.48.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACu google.golang.org/grpc v1.49.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= google.golang.org/grpc v1.50.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= google.golang.org/grpc v1.50.1/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= -google.golang.org/grpc v1.64.1 h1:LKtvyfbX3UGVPFcGqJ9ItpVWW6oN/2XqTxfAnwRRXiA= -google.golang.org/grpc v1.64.1/go.mod h1:hiQF4LFZelK2WKaP6W0L92zGHtiQdZxk8CrSdvyjeP0= +google.golang.org/grpc v1.65.0 h1:bs/cUb4lp1G5iImFFd3u5ixQzweKizoZJAwBNLR42lc= +google.golang.org/grpc v1.65.0/go.mod h1:WgYC2ypjlB0EiQi6wdKixMqukr6lBc0Vo+oOgjrM5ZQ= google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= From 30e665066a31362492f673bf2c9e6b91572d3706 Mon Sep 17 00:00:00 2001 From: replicated-ci-kots <91219917+replicated-ci-kots@users.noreply.github.com> Date: Sun, 28 Jul 2024 12:08:20 +0000 Subject: [PATCH 012/123] Update KOTS image dependency tags (#4788) Co-authored-by: dydx <25685+dydx@users.noreply.github.com> --- .image.env | 2 +- Makefile | 2 +- pkg/image/constants.go | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.image.env b/.image.env index 08827491c4..812445cbf1 100644 --- a/.image.env +++ b/.image.env @@ -1,7 +1,7 @@ # Generated file, do not modify. This file is generated from a text file containing a list of images. The # most recent tag is interpolated from the source repository and used to generate a fully qualified image # name. -MINIO_TAG='0.20240716.234641-r0' +MINIO_TAG='0.20240726.204821-r0' RQLITE_TAG='8.26.7-r0' DEX_TAG='2.40.0-r3' SCHEMAHERO_TAG='0.17.9' diff --git a/Makefile b/Makefile index e6d5c92ab2..968a2ce62a 100644 --- a/Makefile +++ b/Makefile @@ -1,6 +1,6 @@ include Makefile.build.mk CURRENT_USER := $(if $(GITHUB_USER),$(GITHUB_USER),$(shell id -u -n)) -MINIO_TAG ?= 0.20240716.234641-r0 +MINIO_TAG ?= 0.20240726.204821-r0 RQLITE_TAG ?= 8.26.7-r0 DEX_TAG ?= 2.40.0-r3 LVP_TAG ?= v0.6.7 diff --git a/pkg/image/constants.go b/pkg/image/constants.go index c30a0ec378..57ab0de516 100644 --- a/pkg/image/constants.go +++ b/pkg/image/constants.go @@ -5,7 +5,7 @@ package image // image name. const ( - Minio = "kotsadm/minio:0.20240716.234641-r0" + Minio = "kotsadm/minio:0.20240726.204821-r0" Rqlite = "kotsadm/rqlite:8.26.7-r0" Dex = "kotsadm/dex:2.40.0-r3" Schemahero = "schemahero/schemahero:0.17.9" From 63c3d39c7e3d2868349ab0707483a872e60a87f7 Mon Sep 17 00:00:00 2001 From: Mia Wong Date: Mon, 29 Jul 2024 11:24:33 -0400 Subject: [PATCH 013/123] Fetch available updates after uploading a new airgap version (#4781) --- web/src/components/apps/AppVersionHistory.tsx | 3 +++ 1 file changed, 3 insertions(+) diff --git a/web/src/components/apps/AppVersionHistory.tsx b/web/src/components/apps/AppVersionHistory.tsx index 96a5262d77..35126e5a69 100644 --- a/web/src/components/apps/AppVersionHistory.tsx +++ b/web/src/components/apps/AppVersionHistory.tsx @@ -1104,6 +1104,9 @@ class AppVersionHistory extends Component { this.props.outletContext.updateCallback(); } this.fetchKotsDownstreamHistory(); + if (this.props.outletContext.isEmbeddedCluster) { + this.fetchAvailableUpdates(); + } } else { this.setState({ checkingForUpdates: true, From 07e1f6c10cfb7437b61354bac397651cb6ccf095 Mon Sep 17 00:00:00 2001 From: Mia Wong Date: Mon, 29 Jul 2024 11:51:15 -0400 Subject: [PATCH 014/123] Direct to app if user tries to upload license (#4789) --- web/src/components/UploadLicenseFile.tsx | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/web/src/components/UploadLicenseFile.tsx b/web/src/components/UploadLicenseFile.tsx index 1cdd89ca03..90b1a3e020 100644 --- a/web/src/components/UploadLicenseFile.tsx +++ b/web/src/components/UploadLicenseFile.tsx @@ -128,6 +128,13 @@ const UploadLicenseFile = (props: Props) => { } }, []); + useEffect(() => { + const { appSlugFromMetadata, appsListLength, isEmbeddedCluster } = props; + if (appsListLength > 0 && isEmbeddedCluster) { + navigate(`/app/${appSlugFromMetadata}`, { replace: true }); + } + }, [props.appsListLength]); + const exchangeRliFileForLicense = async (content: string) => { return new Promise((resolve, reject) => { const payload = { From 691be099c68b9583ffaa1068090fbd54073e3a6a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 29 Jul 2024 09:12:44 -0700 Subject: [PATCH 015/123] Bump the security group in /web with 11 updates (#4784) Bumps the security group in /web with 11 updates: | Package | From | To | | --- | --- | --- | | [@emotion/react](https://github.com/emotion-js/emotion) | `11.12.0` | `11.13.0` | | [@emotion/styled](https://github.com/emotion-js/emotion) | `11.12.0` | `11.13.0` | | [@mui/icons-material](https://github.com/mui/material-ui/tree/HEAD/packages/mui-icons-material) | `5.16.4` | `5.16.5` | | [@mui/material](https://github.com/mui/material-ui/tree/HEAD/packages/mui-material) | `5.16.4` | `5.16.5` | | [apexcharts](https://github.com/apexcharts/apexcharts.js) | `3.50.0` | `3.51.0` | | [universal-cookie](https://github.com/bendotcodes/cookies) | `7.1.4` | `7.2.0` | | [@babel/eslint-parser](https://github.com/babel/babel/tree/HEAD/eslint/babel-eslint-parser) | `7.24.8` | `7.25.0` | | [@babel/preset-env](https://github.com/babel/babel/tree/HEAD/packages/babel-preset-env) | `7.24.8` | `7.25.0` | | [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) | `20.14.11` | `20.14.12` | | [eslint-plugin-react](https://github.com/jsx-eslint/eslint-plugin-react) | `7.34.4` | `7.35.0` | | [tailwindcss](https://github.com/tailwindlabs/tailwindcss) | `3.4.6` | `3.4.7` | Updates `@emotion/react` from 11.12.0 to 11.13.0 - [Release notes](https://github.com/emotion-js/emotion/releases) - [Changelog](https://github.com/emotion-js/emotion/blob/main/CHANGELOG.md) - [Commits](https://github.com/emotion-js/emotion/compare/@emotion/react@11.12.0...@emotion/react@11.13.0) Updates `@emotion/styled` from 11.12.0 to 11.13.0 - [Release notes](https://github.com/emotion-js/emotion/releases) - [Changelog](https://github.com/emotion-js/emotion/blob/main/CHANGELOG.md) - [Commits](https://github.com/emotion-js/emotion/compare/@emotion/styled@11.12.0...@emotion/styled@11.13.0) Updates `@mui/icons-material` from 5.16.4 to 5.16.5 - [Release notes](https://github.com/mui/material-ui/releases) - [Changelog](https://github.com/mui/material-ui/blob/v5.16.5/CHANGELOG.md) - [Commits](https://github.com/mui/material-ui/commits/v5.16.5/packages/mui-icons-material) Updates `@mui/material` from 5.16.4 to 5.16.5 - [Release notes](https://github.com/mui/material-ui/releases) - [Changelog](https://github.com/mui/material-ui/blob/v5.16.5/CHANGELOG.md) - [Commits](https://github.com/mui/material-ui/commits/v5.16.5/packages/mui-material) Updates `apexcharts` from 3.50.0 to 3.51.0 - [Release notes](https://github.com/apexcharts/apexcharts.js/releases) - [Commits](https://github.com/apexcharts/apexcharts.js/compare/v3.50.0...v3.51.0) Updates `universal-cookie` from 7.1.4 to 7.2.0 - [Release notes](https://github.com/bendotcodes/cookies/releases) - [Changelog](https://github.com/bendotcodes/cookies/blob/main/LEGACY-CHANGELOG.md) - [Commits](https://github.com/bendotcodes/cookies/compare/v7.1.4...v7.2.0) Updates `@babel/eslint-parser` from 7.24.8 to 7.25.0 - [Release notes](https://github.com/babel/babel/releases) - [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md) - [Commits](https://github.com/babel/babel/commits/v7.25.0/eslint/babel-eslint-parser) Updates `@babel/preset-env` from 7.24.8 to 7.25.0 - [Release notes](https://github.com/babel/babel/releases) - [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md) - [Commits](https://github.com/babel/babel/commits/v7.25.0/packages/babel-preset-env) Updates `@types/node` from 20.14.11 to 20.14.12 - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node) Updates `eslint-plugin-react` from 7.34.4 to 7.35.0 - [Release notes](https://github.com/jsx-eslint/eslint-plugin-react/releases) - [Changelog](https://github.com/jsx-eslint/eslint-plugin-react/blob/master/CHANGELOG.md) - [Commits](https://github.com/jsx-eslint/eslint-plugin-react/compare/v7.34.4...v7.35.0) Updates `tailwindcss` from 3.4.6 to 3.4.7 - [Release notes](https://github.com/tailwindlabs/tailwindcss/releases) - [Changelog](https://github.com/tailwindlabs/tailwindcss/blob/v3.4.7/CHANGELOG.md) - [Commits](https://github.com/tailwindlabs/tailwindcss/compare/v3.4.6...v3.4.7) --- updated-dependencies: - dependency-name: "@emotion/react" dependency-type: direct:production update-type: version-update:semver-minor dependency-group: security - dependency-name: "@emotion/styled" dependency-type: direct:production update-type: version-update:semver-minor dependency-group: security - dependency-name: "@mui/icons-material" dependency-type: direct:production update-type: version-update:semver-patch dependency-group: security - dependency-name: "@mui/material" dependency-type: direct:production update-type: version-update:semver-patch dependency-group: security - dependency-name: apexcharts dependency-type: direct:production update-type: version-update:semver-minor dependency-group: security - dependency-name: universal-cookie dependency-type: direct:production update-type: version-update:semver-minor dependency-group: security - dependency-name: "@babel/eslint-parser" dependency-type: direct:development update-type: version-update:semver-minor dependency-group: security - dependency-name: "@babel/preset-env" dependency-type: direct:development update-type: version-update:semver-minor dependency-group: security - dependency-name: "@types/node" dependency-type: direct:development update-type: version-update:semver-patch dependency-group: security - dependency-name: eslint-plugin-react dependency-type: direct:development update-type: version-update:semver-minor dependency-group: security - dependency-name: tailwindcss dependency-type: direct:development update-type: version-update:semver-patch dependency-group: security ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- web/package.json | 22 +-- web/yarn.lock | 447 +++++++++++++++++++++++++++++------------------ 2 files changed, 287 insertions(+), 182 deletions(-) diff --git a/web/package.json b/web/package.json index 5ba8b1222c..58dff68ca7 100644 --- a/web/package.json +++ b/web/package.json @@ -24,13 +24,13 @@ "@aws-sdk/types": "^3.609.0", "@babel/cli": "^7.24.8", "@babel/core": "^7.24.9", - "@babel/eslint-parser": "^7.24.8", + "@babel/eslint-parser": "^7.25.0", "@babel/helper-get-function-arity": "^7.16.7", "@babel/plugin-proposal-class-properties": "7.18.6", "@babel/plugin-proposal-decorators": "7.24.7", "@babel/plugin-proposal-object-rest-spread": "7.20.7", "@babel/plugin-proposal-optional-chaining": "7.21.0", - "@babel/preset-env": "^7.24.8", + "@babel/preset-env": "^7.25.0", "@babel/preset-react": "^7.24.7", "@babel/preset-typescript": "^7.24.7", "@pact-foundation/pact": "^12.5.2", @@ -53,7 +53,7 @@ "@types/jest": "^29.5.12", "@types/js-yaml": "3", "@types/lodash": "^4.17.7", - "@types/node": "^20.14.11", + "@types/node": "^20.14.12", "@types/react": "^18.3.3", "@types/react-dom": "^18.3.0", "@types/react-helmet": "^6.1.11", @@ -89,7 +89,7 @@ "eslint-plugin-node": "11.1.0", "eslint-plugin-prettier": "^4.2.1", "eslint-plugin-promise": "4.2.1", - "eslint-plugin-react": "^7.34.4", + "eslint-plugin-react": "^7.35.0", "eslint-plugin-react-hooks": "^4.6.2", "eslint-plugin-standard": "5.0.0", "eslint-webpack-plugin": "^4.2.0", @@ -107,7 +107,7 @@ "source-map-loader": "^5.0.0", "stream-browserify": "^3.0.0", "style-loader": "^3.3.4", - "tailwindcss": "^3.4.6", + "tailwindcss": "^3.4.7", "terser-webpack-plugin": "^5.3.10", "ts-loader": "^9.5.1", "tty-browserify": "^0.0.1", @@ -121,18 +121,18 @@ "webpack-merge": "5.10.0" }, "dependencies": { - "@emotion/react": "^11.12.0", - "@emotion/styled": "^11.12.0", + "@emotion/react": "^11.13.0", + "@emotion/styled": "^11.13.0", "@grafana/data": "^8.5.16", "@maji/react-prism": "^1.0.1", "@monaco-editor/react": "^4.6.0", - "@mui/icons-material": "^5.16.4", - "@mui/material": "^5.16.4", + "@mui/icons-material": "^5.16.5", + "@mui/material": "^5.16.5", "@storybook/addon-storysource": "^7.6.17", "@tanstack/react-query": "^4.36.1", "@tanstack/react-query-devtools": "^4.36.1", "accounting": "^0.4.1", - "apexcharts": "^3.50.0", + "apexcharts": "^3.51.0", "axios": "^1.7.2", "brace": "^0.11.1", "classnames": "^2.5.1", @@ -176,7 +176,7 @@ "semver": "^7.6.3", "styled-components": "^5.3.5", "tar-stream": "3.1.7", - "universal-cookie": "^7.1.4" + "universal-cookie": "^7.2.0" }, "resolutions": { "d3-color": "^3.1.0", diff --git a/web/yarn.lock b/web/yarn.lock index 6c0c6a2945..e6471dc2b9 100644 --- a/web/yarn.lock +++ b/web/yarn.lock @@ -57,10 +57,10 @@ "@babel/highlight" "^7.24.7" picocolors "^1.0.0" -"@babel/compat-data@^7.20.5", "@babel/compat-data@^7.22.6", "@babel/compat-data@^7.24.8": - version "7.24.8" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.24.8.tgz#f9196455334c38d059ac8b1a16a51decda9d30d3" - integrity sha512-c4IM7OTg6k1Q+AJ153e2mc2QVTezTwnb4VzquwcyiEzGnW0Kedv4do/TrkU98qPeC5LNiMt/QXwIjzYXLBpyZg== +"@babel/compat-data@^7.20.5", "@babel/compat-data@^7.22.6", "@babel/compat-data@^7.24.8", "@babel/compat-data@^7.25.0": + version "7.25.0" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.25.0.tgz#6b226a5da3a686db3c30519750e071dce292ad95" + integrity sha512-P4fwKI2mjEb3ZU5cnMJzvRsRKGBUcs8jvxIoRmr6ufAY9Xk2Bz7JubRTTivkw55c7WQJfTECeqYVa+HZ0FzREg== "@babel/core@7.12.9": version "7.12.9" @@ -105,10 +105,10 @@ json5 "^2.2.3" semver "^6.3.1" -"@babel/eslint-parser@^7.24.8": - version "7.24.8" - resolved "https://registry.yarnpkg.com/@babel/eslint-parser/-/eslint-parser-7.24.8.tgz#bc655255fa4ded3694cc10ef3dbea6d69639c831" - integrity sha512-nYAikI4XTGokU2QX7Jx+v4rxZKhKivaQaREZjuW3mrJrbdWJ5yUfohnoUULge+zEEaKjPYNxhoRgUKktjXtbwA== +"@babel/eslint-parser@^7.25.0": + version "7.25.0" + resolved "https://registry.yarnpkg.com/@babel/eslint-parser/-/eslint-parser-7.25.0.tgz#08ee4d119a86d73365580568626de0b59145af9e" + integrity sha512-mlcTKuQAjczDRwWLIxv+Q925jaMUO8Jl5dxmWJSSGVYfZ4rKMp8daQvVC3rM1G2v8V+/fO0yIVTSLS+2zcB8rg== dependencies: "@nicolo-ribaudo/eslint-scope-5-internals" "5.1.1-v1" eslint-visitor-keys "^2.1.0" @@ -124,6 +124,16 @@ "@jridgewell/trace-mapping" "^0.3.25" jsesc "^2.5.1" +"@babel/generator@^7.25.0": + version "7.25.0" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.25.0.tgz#f858ddfa984350bc3d3b7f125073c9af6988f18e" + integrity sha512-3LEEcj3PVW8pW2R1SR1M89g/qrYk/m/mB/tLqn7dn4sbBUQyTqnlod+II2U4dqiGtUmkcnAmkMDralTFZttRiw== + dependencies: + "@babel/types" "^7.25.0" + "@jridgewell/gen-mapping" "^0.3.5" + "@jridgewell/trace-mapping" "^0.3.25" + jsesc "^2.5.1" + "@babel/helper-annotate-as-pure@^7.16.0", "@babel/helper-annotate-as-pure@^7.18.6": version "7.18.6" resolved "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz" @@ -189,6 +199,15 @@ regexpu-core "^5.3.1" semver "^6.3.1" +"@babel/helper-create-regexp-features-plugin@^7.25.0": + version "7.25.0" + resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.25.0.tgz#17afe5d23b3a833a90f0fab9c2ae69fea192de5c" + integrity sha512-q0T+dknZS+L5LDazIP+02gEZITG5unzvb6yIjcmj5i0eFrs5ToBV2m2JGH4EsE/gtP8ygEGLGApBgRIZkTm7zg== + dependencies: + "@babel/helper-annotate-as-pure" "^7.24.7" + regexpu-core "^5.3.1" + semver "^6.3.1" + "@babel/helper-define-polyfill-provider@^0.1.5": version "0.1.5" resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.1.5.tgz#3c2f91b7971b9fc11fe779c945c014065dea340e" @@ -251,6 +270,14 @@ "@babel/traverse" "^7.24.7" "@babel/types" "^7.24.7" +"@babel/helper-member-expression-to-functions@^7.24.8": + version "7.24.8" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.24.8.tgz#6155e079c913357d24a4c20480db7c712a5c3fb6" + integrity sha512-LABppdt+Lp/RlBxqrh4qgf1oEH/WxdzQNDJIu5gC/W1GyvPVrOBiItmmM8wan2fm4oYqFuFfkXmlGpLQhPY8CA== + dependencies: + "@babel/traverse" "^7.24.8" + "@babel/types" "^7.24.8" + "@babel/helper-module-imports@^7.0.0": version "7.16.7" resolved "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz" @@ -291,6 +318,16 @@ "@babel/helper-split-export-declaration" "^7.24.7" "@babel/helper-validator-identifier" "^7.24.7" +"@babel/helper-module-transforms@^7.25.0": + version "7.25.0" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.25.0.tgz#3ffc23c473a2769a7e40d3274495bd559fdd2ecc" + integrity sha512-bIkOa2ZJYn7FHnepzr5iX9Kmz8FjIz4UKzJ9zhX3dnYuVW0xul9RuR3skBfoLu+FPTQw90EHW9rJsSZhyLQ3fQ== + dependencies: + "@babel/helper-module-imports" "^7.24.7" + "@babel/helper-simple-access" "^7.24.7" + "@babel/helper-validator-identifier" "^7.24.7" + "@babel/traverse" "^7.25.0" + "@babel/helper-optimise-call-expression@^7.24.7": version "7.24.7" resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.24.7.tgz#8b0a0456c92f6b323d27cfd00d1d664e76692a0f" @@ -317,6 +354,15 @@ "@babel/helper-environment-visitor" "^7.24.7" "@babel/helper-wrap-function" "^7.24.7" +"@babel/helper-remap-async-to-generator@^7.25.0": + version "7.25.0" + resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.25.0.tgz#d2f0fbba059a42d68e5e378feaf181ef6055365e" + integrity sha512-NhavI2eWEIz/H9dbrG0TuOicDhNexze43i5z7lEqwYm0WEZVTwnPpA0EafUTP7+6/W79HWIP2cTe3Z5NiSTVpw== + dependencies: + "@babel/helper-annotate-as-pure" "^7.24.7" + "@babel/helper-wrap-function" "^7.25.0" + "@babel/traverse" "^7.25.0" + "@babel/helper-replace-supers@^7.24.7": version "7.24.7" resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.24.7.tgz#f933b7eed81a1c0265740edc91491ce51250f765" @@ -326,6 +372,15 @@ "@babel/helper-member-expression-to-functions" "^7.24.7" "@babel/helper-optimise-call-expression" "^7.24.7" +"@babel/helper-replace-supers@^7.25.0": + version "7.25.0" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.25.0.tgz#ff44deac1c9f619523fe2ca1fd650773792000a9" + integrity sha512-q688zIvQVYtZu+i2PsdIu/uWGRpfxzr5WESsfpShfZECkO+d2o+WROWezCi/Q6kJ0tfPa5+pUGUlfx2HhrA3Bg== + dependencies: + "@babel/helper-member-expression-to-functions" "^7.24.8" + "@babel/helper-optimise-call-expression" "^7.24.7" + "@babel/traverse" "^7.25.0" + "@babel/helper-simple-access@^7.24.7": version "7.24.7" resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.24.7.tgz#bcade8da3aec8ed16b9c4953b74e506b51b5edb3" @@ -381,6 +436,15 @@ "@babel/traverse" "^7.24.7" "@babel/types" "^7.24.7" +"@babel/helper-wrap-function@^7.25.0": + version "7.25.0" + resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.25.0.tgz#dab12f0f593d6ca48c0062c28bcfb14ebe812f81" + integrity sha512-s6Q1ebqutSiZnEjaofc/UKDyC4SbzV5n5SrA2Gq8UawLycr3i04f1dX4OzoQVnexm6aOCh37SQNYlJ/8Ku+PMQ== + dependencies: + "@babel/template" "^7.25.0" + "@babel/traverse" "^7.25.0" + "@babel/types" "^7.25.0" + "@babel/helpers@^7.12.5", "@babel/helpers@^7.24.8": version "7.24.8" resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.24.8.tgz#2820d64d5d6686cca8789dd15b074cd862795873" @@ -404,20 +468,32 @@ resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.24.8.tgz#58a4dbbcad7eb1d48930524a3fd93d93e9084c6f" integrity sha512-WzfbgXOkGzZiXXCqk43kKwZjzwx4oulxZi3nq2TYL9mOjQv6kYwul9mz6ID36njuL7Xkp6nJEfok848Zj10j/w== -"@babel/plugin-bugfix-firefox-class-in-computed-class-key@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.24.7.tgz#fd059fd27b184ea2b4c7e646868a9a381bbc3055" - integrity sha512-TiT1ss81W80eQsN+722OaeQMY/G4yTb4G9JrqeiDADs3N8lbPMGldWi9x8tyqCW5NLx1Jh2AvkE6r6QvEltMMQ== +"@babel/parser@^7.25.0": + version "7.25.0" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.25.0.tgz#9fdc9237504d797b6e7b8f66e78ea7f570d256ad" + integrity sha512-CzdIU9jdP0dg7HdyB+bHvDJGagUv+qtzZt5rYCWwW6tITNqV9odjp6Qu41gkG0ca5UfdDUWrKkiAnHHdGRnOrA== + +"@babel/plugin-bugfix-firefox-class-in-computed-class-key@^7.25.0": + version "7.25.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.25.0.tgz#328275f22d809b962978d998c6eba22a233ac8aa" + integrity sha512-dG0aApncVQwAUJa8tP1VHTnmU67BeIQvKafd3raEx315H54FfkZSz3B/TT+33ZQAjatGJA79gZqTtqL5QZUKXw== dependencies: - "@babel/helper-environment-visitor" "^7.24.7" - "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.8" + "@babel/traverse" "^7.25.0" -"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.24.7.tgz#468096ca44bbcbe8fcc570574e12eb1950e18107" - integrity sha512-unaQgZ/iRu/By6tsjMZzpeBZjChYfLYry6HrEXPoz3KmfF0sVBQ1l8zKMQ4xRGLWVsjuvB8nQfjNP/DcfEOCsg== +"@babel/plugin-bugfix-safari-class-field-initializer-scope@^7.25.0": + version "7.25.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.25.0.tgz#cd0c583e01369ef51676bdb3d7b603e17d2b3f73" + integrity sha512-Bm4bH2qsX880b/3ziJ8KD711LT7z4u8CFudmjqle65AZj/HNUFhEf90dqYv6O86buWvSBmeQDjv0Tn2aF/bIBA== dependencies: - "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.8" + +"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.25.0": + version "7.25.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.25.0.tgz#749bde80356b295390954643de7635e0dffabe73" + integrity sha512-lXwdNZtTmeVOOFtwM/WDe7yg1PL8sYhRk/XH0FzbR2HDQ0xC+EnQ/JHeoMYSavtU115tnUk0q9CDyq8si+LMAA== + dependencies: + "@babel/helper-plugin-utils" "^7.24.8" "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.24.7": version "7.24.7" @@ -428,13 +504,13 @@ "@babel/helper-skip-transparent-expression-wrappers" "^7.24.7" "@babel/plugin-transform-optional-chaining" "^7.24.7" -"@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.24.7.tgz#71b21bb0286d5810e63a1538aa901c58e87375ec" - integrity sha512-utA4HuR6F4Vvcr+o4DnjL8fCOlgRFGbeeBEGNg3ZTrLFw6VWG5XmUrvcQ0FjIYMU2ST4XcR2Wsp7t9qOAPnxMg== +"@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@^7.25.0": + version "7.25.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.25.0.tgz#3a82a70e7cb7294ad2559465ebcb871dfbf078fb" + integrity sha512-tggFrk1AIShG/RUQbEwt2Tr/E+ObkfwrPjR6BjbRvsx24+PSjK8zrq0GWPNCjo8qpRx4DuJzlcvWJqlm+0h3kw== dependencies: - "@babel/helper-environment-visitor" "^7.24.7" - "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.8" + "@babel/traverse" "^7.25.0" "@babel/plugin-proposal-class-properties@7.18.6", "@babel/plugin-proposal-class-properties@^7.12.1": version "7.18.6" @@ -711,15 +787,15 @@ dependencies: "@babel/helper-plugin-utils" "^7.24.7" -"@babel/plugin-transform-async-generator-functions@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.24.7.tgz#7330a5c50e05181ca52351b8fd01642000c96cfd" - integrity sha512-o+iF77e3u7ZS4AoAuJvapz9Fm001PuD2V3Lp6OSE4FYQke+cSewYtnek+THqGRWyQloRCyvWL1OkyfNEl9vr/g== +"@babel/plugin-transform-async-generator-functions@^7.25.0": + version "7.25.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.25.0.tgz#b785cf35d73437f6276b1e30439a57a50747bddf" + integrity sha512-uaIi2FdqzjpAMvVqvB51S42oC2JEVgh0LDsGfZVDysWE8LrJtQC2jvKmOqEYThKyB7bDEb7BP1GYWDm7tABA0Q== dependencies: - "@babel/helper-environment-visitor" "^7.24.7" - "@babel/helper-plugin-utils" "^7.24.7" - "@babel/helper-remap-async-to-generator" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.8" + "@babel/helper-remap-async-to-generator" "^7.25.0" "@babel/plugin-syntax-async-generators" "^7.8.4" + "@babel/traverse" "^7.25.0" "@babel/plugin-transform-async-to-generator@^7.24.7": version "7.24.7" @@ -737,12 +813,12 @@ dependencies: "@babel/helper-plugin-utils" "^7.24.7" -"@babel/plugin-transform-block-scoping@^7.12.12", "@babel/plugin-transform-block-scoping@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.24.7.tgz#42063e4deb850c7bd7c55e626bf4e7ab48e6ce02" - integrity sha512-Nd5CvgMbWc+oWzBsuaMcbwjJWAcp5qzrbg69SZdHSP7AMY0AbWFqFO0WTFCA1jxhMCwodRwvRec8k0QUbZk7RQ== +"@babel/plugin-transform-block-scoping@^7.12.12", "@babel/plugin-transform-block-scoping@^7.25.0": + version "7.25.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.25.0.tgz#23a6ed92e6b006d26b1869b1c91d1b917c2ea2ac" + integrity sha512-yBQjYoOjXlFv9nlXb3f1casSHOZkWr29NX+zChVanLg5Nc157CrbEX9D7hxxtTpuFy7Q0YzmmWfJxzvps4kXrQ== dependencies: - "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.8" "@babel/plugin-transform-class-properties@^7.24.7": version "7.24.7" @@ -761,18 +837,16 @@ "@babel/helper-plugin-utils" "^7.24.7" "@babel/plugin-syntax-class-static-block" "^7.14.5" -"@babel/plugin-transform-classes@^7.12.1", "@babel/plugin-transform-classes@^7.24.8": - version "7.24.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.24.8.tgz#ad23301fe5bc153ca4cf7fb572a9bc8b0b711cf7" - integrity sha512-VXy91c47uujj758ud9wx+OMgheXm4qJfyhj1P18YvlrQkNOSrwsteHk+EFS3OMGfhMhpZa0A+81eE7G4QC+3CA== +"@babel/plugin-transform-classes@^7.12.1", "@babel/plugin-transform-classes@^7.25.0": + version "7.25.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.25.0.tgz#63122366527d88e0ef61b612554fe3f8c793991e" + integrity sha512-xyi6qjr/fYU304fiRwFbekzkqVJZ6A7hOjWZd+89FVcBqPV3S9Wuozz82xdpLspckeaafntbzglaW4pqpzvtSw== dependencies: "@babel/helper-annotate-as-pure" "^7.24.7" "@babel/helper-compilation-targets" "^7.24.8" - "@babel/helper-environment-visitor" "^7.24.7" - "@babel/helper-function-name" "^7.24.7" "@babel/helper-plugin-utils" "^7.24.8" - "@babel/helper-replace-supers" "^7.24.7" - "@babel/helper-split-export-declaration" "^7.24.7" + "@babel/helper-replace-supers" "^7.25.0" + "@babel/traverse" "^7.25.0" globals "^11.1.0" "@babel/plugin-transform-computed-properties@^7.24.7": @@ -805,6 +879,14 @@ dependencies: "@babel/helper-plugin-utils" "^7.24.7" +"@babel/plugin-transform-duplicate-named-capturing-groups-regex@^7.25.0": + version "7.25.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.25.0.tgz#809af7e3339466b49c034c683964ee8afb3e2604" + integrity sha512-YLpb4LlYSc3sCUa35un84poXoraOiQucUTTu8X1j18JV+gNa8E0nyUf/CjZ171IRGr4jEguF+vzJU66QZhn29g== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.25.0" + "@babel/helper-plugin-utils" "^7.24.8" + "@babel/plugin-transform-dynamic-import@^7.24.7": version "7.24.7" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.24.7.tgz#4d8b95e3bae2b037673091aa09cd33fecd6419f4" @@ -845,14 +927,14 @@ "@babel/helper-plugin-utils" "^7.24.7" "@babel/helper-skip-transparent-expression-wrappers" "^7.24.7" -"@babel/plugin-transform-function-name@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.24.7.tgz#6d8601fbffe665c894440ab4470bc721dd9131d6" - integrity sha512-U9FcnA821YoILngSmYkW6FjyQe2TyZD5pHt4EVIhmcTkrJw/3KqcrRSxuOo5tFZJi7TE19iDyI1u+weTI7bn2w== +"@babel/plugin-transform-function-name@^7.25.0": + version "7.25.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.25.0.tgz#d17890029ceefb45189ea203b404a496263a8412" + integrity sha512-CQmfSnK14eYu82fu6GlCwRciHB7mp7oLN+DeyGDDwUr9cMwuSVviJKPXw/YcRYZdB1TdlLJWHHwXwnwD1WnCmQ== dependencies: - "@babel/helper-compilation-targets" "^7.24.7" - "@babel/helper-function-name" "^7.24.7" - "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-compilation-targets" "^7.24.8" + "@babel/helper-plugin-utils" "^7.24.8" + "@babel/traverse" "^7.25.0" "@babel/plugin-transform-json-strings@^7.24.7": version "7.24.7" @@ -901,15 +983,15 @@ "@babel/helper-plugin-utils" "^7.24.8" "@babel/helper-simple-access" "^7.24.7" -"@babel/plugin-transform-modules-systemjs@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.24.7.tgz#f8012316c5098f6e8dee6ecd58e2bc6f003d0ce7" - integrity sha512-GYQE0tW7YoaN13qFh3O1NCY4MPkUiAH3fiF7UcV/I3ajmDKEdG3l+UOcbAm4zUE3gnvUU+Eni7XrVKo9eO9auw== +"@babel/plugin-transform-modules-systemjs@^7.25.0": + version "7.25.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.25.0.tgz#8f46cdc5f9e5af74f3bd019485a6cbe59685ea33" + integrity sha512-YPJfjQPDXxyQWg/0+jHKj1llnY5f/R6a0p/vP4lPymxLu7Lvl4k2WMitqi08yxwQcCVUUdG9LCUj4TNEgAp3Jw== dependencies: - "@babel/helper-hoist-variables" "^7.24.7" - "@babel/helper-module-transforms" "^7.24.7" - "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-module-transforms" "^7.25.0" + "@babel/helper-plugin-utils" "^7.24.8" "@babel/helper-validator-identifier" "^7.24.7" + "@babel/traverse" "^7.25.0" "@babel/plugin-transform-modules-umd@^7.24.7": version "7.24.7" @@ -1150,19 +1232,20 @@ core-js "^2.6.5" regenerator-runtime "^0.13.4" -"@babel/preset-env@^7.12.11", "@babel/preset-env@^7.24.8": - version "7.24.8" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.24.8.tgz#e0db94d7f17d6f0e2564e8d29190bc8cdacec2d1" - integrity sha512-vObvMZB6hNWuDxhSaEPTKCwcqkAIuDtE+bQGn4XMXne1DSLzFVY8Vmj1bm+mUQXYNN8NmaQEO+r8MMbzPr1jBQ== +"@babel/preset-env@^7.12.11", "@babel/preset-env@^7.25.0": + version "7.25.0" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.25.0.tgz#3fe92e470311e91478129efda101816c680f0479" + integrity sha512-vYAA8PrCOeZfG4D87hmw1KJ1BPubghXP1e2MacRFwECGNKL76dkA38JEwYllbvQCpf/kLxsTtir0b8MtxKoVCw== dependencies: - "@babel/compat-data" "^7.24.8" + "@babel/compat-data" "^7.25.0" "@babel/helper-compilation-targets" "^7.24.8" "@babel/helper-plugin-utils" "^7.24.8" "@babel/helper-validator-option" "^7.24.8" - "@babel/plugin-bugfix-firefox-class-in-computed-class-key" "^7.24.7" - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.24.7" + "@babel/plugin-bugfix-firefox-class-in-computed-class-key" "^7.25.0" + "@babel/plugin-bugfix-safari-class-field-initializer-scope" "^7.25.0" + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.25.0" "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.24.7" - "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly" "^7.24.7" + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly" "^7.25.0" "@babel/plugin-proposal-private-property-in-object" "7.21.0-placeholder-for-preset-env.2" "@babel/plugin-syntax-async-generators" "^7.8.4" "@babel/plugin-syntax-class-properties" "^7.12.13" @@ -1183,29 +1266,30 @@ "@babel/plugin-syntax-top-level-await" "^7.14.5" "@babel/plugin-syntax-unicode-sets-regex" "^7.18.6" "@babel/plugin-transform-arrow-functions" "^7.24.7" - "@babel/plugin-transform-async-generator-functions" "^7.24.7" + "@babel/plugin-transform-async-generator-functions" "^7.25.0" "@babel/plugin-transform-async-to-generator" "^7.24.7" "@babel/plugin-transform-block-scoped-functions" "^7.24.7" - "@babel/plugin-transform-block-scoping" "^7.24.7" + "@babel/plugin-transform-block-scoping" "^7.25.0" "@babel/plugin-transform-class-properties" "^7.24.7" "@babel/plugin-transform-class-static-block" "^7.24.7" - "@babel/plugin-transform-classes" "^7.24.8" + "@babel/plugin-transform-classes" "^7.25.0" "@babel/plugin-transform-computed-properties" "^7.24.7" "@babel/plugin-transform-destructuring" "^7.24.8" "@babel/plugin-transform-dotall-regex" "^7.24.7" "@babel/plugin-transform-duplicate-keys" "^7.24.7" + "@babel/plugin-transform-duplicate-named-capturing-groups-regex" "^7.25.0" "@babel/plugin-transform-dynamic-import" "^7.24.7" "@babel/plugin-transform-exponentiation-operator" "^7.24.7" "@babel/plugin-transform-export-namespace-from" "^7.24.7" "@babel/plugin-transform-for-of" "^7.24.7" - "@babel/plugin-transform-function-name" "^7.24.7" + "@babel/plugin-transform-function-name" "^7.25.0" "@babel/plugin-transform-json-strings" "^7.24.7" "@babel/plugin-transform-literals" "^7.24.7" "@babel/plugin-transform-logical-assignment-operators" "^7.24.7" "@babel/plugin-transform-member-expression-literals" "^7.24.7" "@babel/plugin-transform-modules-amd" "^7.24.7" "@babel/plugin-transform-modules-commonjs" "^7.24.8" - "@babel/plugin-transform-modules-systemjs" "^7.24.7" + "@babel/plugin-transform-modules-systemjs" "^7.25.0" "@babel/plugin-transform-modules-umd" "^7.24.7" "@babel/plugin-transform-named-capturing-groups-regex" "^7.24.7" "@babel/plugin-transform-new-target" "^7.24.7" @@ -1310,6 +1394,15 @@ "@babel/parser" "^7.24.7" "@babel/types" "^7.24.7" +"@babel/template@^7.25.0": + version "7.25.0" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.25.0.tgz#e733dc3134b4fede528c15bc95e89cb98c52592a" + integrity sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q== + dependencies: + "@babel/code-frame" "^7.24.7" + "@babel/parser" "^7.25.0" + "@babel/types" "^7.25.0" + "@babel/traverse@^7.1.6", "@babel/traverse@^7.12.11", "@babel/traverse@^7.12.9", "@babel/traverse@^7.13.0", "@babel/traverse@^7.24.7", "@babel/traverse@^7.24.8", "@babel/traverse@^7.4.5": version "7.24.8" resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.24.8.tgz#6c14ed5232b7549df3371d820fbd9abfcd7dfab7" @@ -1326,6 +1419,19 @@ debug "^4.3.1" globals "^11.1.0" +"@babel/traverse@^7.25.0": + version "7.25.0" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.25.0.tgz#e8533c0a57ed97921d1e5b20dd3db63d3efaebf5" + integrity sha512-ubALThHQy4GCf6mbb+5ZRNmLLCI7bJ3f8Q6LHBSRlSKSWj5a7dSUzJBLv3VuIhFrFPgjF4IzPF567YG/HSCdZA== + dependencies: + "@babel/code-frame" "^7.24.7" + "@babel/generator" "^7.25.0" + "@babel/parser" "^7.25.0" + "@babel/template" "^7.25.0" + "@babel/types" "^7.25.0" + debug "^4.3.1" + globals "^11.1.0" + "@babel/types@^7.0.0", "@babel/types@^7.12.11", "@babel/types@^7.12.7", "@babel/types@^7.16.7", "@babel/types@^7.18.6", "@babel/types@^7.2.0", "@babel/types@^7.20.7", "@babel/types@^7.22.15", "@babel/types@^7.22.5", "@babel/types@^7.24.7", "@babel/types@^7.24.8", "@babel/types@^7.24.9", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4": version "7.24.9" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.24.9.tgz#228ce953d7b0d16646e755acf204f4cf3d08cc73" @@ -1335,6 +1441,15 @@ "@babel/helper-validator-identifier" "^7.24.7" to-fast-properties "^2.0.0" +"@babel/types@^7.25.0": + version "7.25.0" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.25.0.tgz#e6e3656c581f28da8452ed4f69e38008ec0ba41b" + integrity sha512-LcnxQSsd9aXOIgmmSpvZ/1yo46ra2ESYyqLcryaBZOghxy5qqOBjvCWP5JfkI8yl9rlxRgdLTTMCQQRcN2hdCg== + dependencies: + "@babel/helper-string-parser" "^7.24.8" + "@babel/helper-validator-identifier" "^7.24.7" + to-fast-properties "^2.0.0" + "@base2/pretty-print-object@1.0.1": version "1.0.1" resolved "https://registry.yarnpkg.com/@base2/pretty-print-object/-/pretty-print-object-1.0.1.tgz#371ba8be66d556812dc7fb169ebc3c08378f69d4" @@ -1397,14 +1512,14 @@ find-root "^1.1.0" source-map "^0.7.2" -"@emotion/cache@^11.11.0", "@emotion/cache@^11.12.0": - version "11.12.0" - resolved "https://registry.yarnpkg.com/@emotion/cache/-/cache-11.12.0.tgz#ae8c735690fdc8f410f3ea849dd7d3ea4c017494" - integrity sha512-VFo/F1PthkxHwWDCcXkidyXw70eAkdiNiCzthMI2rRQjFiTvmXt8UDlv/VE1DTsd4CIEY2wQf5AnL2QiPgphlw== +"@emotion/cache@^11.11.0", "@emotion/cache@^11.13.0": + version "11.13.1" + resolved "https://registry.yarnpkg.com/@emotion/cache/-/cache-11.13.1.tgz#fecfc54d51810beebf05bf2a161271a1a91895d7" + integrity sha512-iqouYkuEblRcXmylXIwwOodiEK5Ifl7JcX7o6V4jI3iW4mLXX3dmt5xwBtIkJiQEXFAI+pC8X0i67yiPkH9Ucw== dependencies: "@emotion/memoize" "^0.9.0" - "@emotion/sheet" "^1.3.0" - "@emotion/utils" "^1.3.0" + "@emotion/sheet" "^1.4.0" + "@emotion/utils" "^1.4.0" "@emotion/weak-memoize" "^0.4.0" stylis "4.2.0" @@ -1435,17 +1550,17 @@ resolved "https://registry.yarnpkg.com/@emotion/memoize/-/memoize-0.9.0.tgz#745969d649977776b43fc7648c556aaa462b4102" integrity sha512-30FAj7/EoJ5mwVPOWhAyCX+FPfMDrVecJAM+Iw9NRoSl4BBAQeqj4cApHHUXOVvIPgLVDsCFoz/hGD+5QQD1GQ== -"@emotion/react@^11.12.0": - version "11.12.0" - resolved "https://registry.yarnpkg.com/@emotion/react/-/react-11.12.0.tgz#b9605522156d3cc917c1dfc3a09540f8620c9166" - integrity sha512-kTktYMpG8mHjLi8u6XOTMfDmQvUve/un2ZVj4khcU2KTn17ElMV8BK6QFzT8V/v2QW8013rf07Yc0ayQL3tp3w== +"@emotion/react@^11.13.0": + version "11.13.0" + resolved "https://registry.yarnpkg.com/@emotion/react/-/react-11.13.0.tgz#a9ebf827b98220255e5760dac89fa2d38ca7b43d" + integrity sha512-WkL+bw1REC2VNV1goQyfxjx1GYJkcc23CRQkXX+vZNLINyfI7o+uUn/rTGPt/xJ3bJHd5GcljgnxHf4wRw5VWQ== dependencies: "@babel/runtime" "^7.18.3" "@emotion/babel-plugin" "^11.12.0" - "@emotion/cache" "^11.12.0" - "@emotion/serialize" "^1.2.0" - "@emotion/use-insertion-effect-with-fallbacks" "^1.0.1" - "@emotion/utils" "^1.3.0" + "@emotion/cache" "^11.13.0" + "@emotion/serialize" "^1.3.0" + "@emotion/use-insertion-effect-with-fallbacks" "^1.1.0" + "@emotion/utils" "^1.4.0" "@emotion/weak-memoize" "^0.4.0" hoist-non-react-statics "^3.3.1" @@ -1459,33 +1574,33 @@ "@emotion/unitless" "^0.6.7" "@emotion/utils" "^0.8.2" -"@emotion/serialize@^1.2.0": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@emotion/serialize/-/serialize-1.2.0.tgz#4fed8629e566676275302844f111219445cabd08" - integrity sha512-X5UWpZAhGGp5LOn7OAI9k9JjRtz7nSFhZypatADcuEd/0bECZ0DzVjPdL8hljTrAku8+TjFvWIYHMOCO/0v/Ng== +"@emotion/serialize@^1.2.0", "@emotion/serialize@^1.3.0": + version "1.3.0" + resolved "https://registry.yarnpkg.com/@emotion/serialize/-/serialize-1.3.0.tgz#e07cadfc967a4e7816e0c3ffaff4c6ce05cb598d" + integrity sha512-jACuBa9SlYajnpIVXB+XOXnfJHyckDfe6fOpORIM6yhBDlqGuExvDdZYHDQGoDf3bZXGv7tNr+LpLjJqiEQ6EA== dependencies: "@emotion/hash" "^0.9.2" "@emotion/memoize" "^0.9.0" "@emotion/unitless" "^0.9.0" - "@emotion/utils" "^1.3.0" + "@emotion/utils" "^1.4.0" csstype "^3.0.2" -"@emotion/sheet@^1.3.0": - version "1.3.0" - resolved "https://registry.yarnpkg.com/@emotion/sheet/-/sheet-1.3.0.tgz#b1bd1d25f5590989187470f0bbc9b962f50fc72f" - integrity sha512-vOPwbKw8fj/oSEa7CWqiKCvLZ1AeLIAApmboGP34xUyUjXalFyf+tMtgMDqP7VMevLPhUa+YWJS46cQUA+tr9A== +"@emotion/sheet@^1.4.0": + version "1.4.0" + resolved "https://registry.yarnpkg.com/@emotion/sheet/-/sheet-1.4.0.tgz#c9299c34d248bc26e82563735f78953d2efca83c" + integrity sha512-fTBW9/8r2w3dXWYM4HCB1Rdp8NLibOw2+XELH5m5+AkWiL/KqYX6dc0kKYlaYyKjrQ6ds33MCdMPEwgs2z1rqg== -"@emotion/styled@^11.12.0": - version "11.12.0" - resolved "https://registry.yarnpkg.com/@emotion/styled/-/styled-11.12.0.tgz#829556b08ff63e7e9a46fb661913f590031f1749" - integrity sha512-2l60kuKm8OKbyFYlVutpwFGoeIoftJAHX4udQwpaO4HNoGyvxFLXiEU56/UGCyrwxr76C93eOdVnGewZeC7AEw== +"@emotion/styled@^11.13.0": + version "11.13.0" + resolved "https://registry.yarnpkg.com/@emotion/styled/-/styled-11.13.0.tgz#633fd700db701472c7a5dbef54d6f9834e9fb190" + integrity sha512-tkzkY7nQhW/zC4hztlwucpT8QEZ6eUzpXDRhww/Eej4tFfO0FxQYWRyg/c5CCXa4d/f174kqeXYjuQRnhzf6dA== dependencies: "@babel/runtime" "^7.18.3" "@emotion/babel-plugin" "^11.12.0" "@emotion/is-prop-valid" "^1.3.0" - "@emotion/serialize" "^1.2.0" - "@emotion/use-insertion-effect-with-fallbacks" "^1.0.1" - "@emotion/utils" "^1.3.0" + "@emotion/serialize" "^1.3.0" + "@emotion/use-insertion-effect-with-fallbacks" "^1.1.0" + "@emotion/utils" "^1.4.0" "@emotion/stylis@^0.7.0": version "0.7.1" @@ -1512,20 +1627,20 @@ resolved "https://registry.yarnpkg.com/@emotion/unitless/-/unitless-0.9.0.tgz#8e5548f072bd67b8271877e51c0f95c76a66cbe2" integrity sha512-TP6GgNZtmtFaFcsOgExdnfxLLpRDla4Q66tnenA9CktvVSdNKDvMVuUah4QvWPIpNjrWsGg3qeGo9a43QooGZQ== -"@emotion/use-insertion-effect-with-fallbacks@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.0.1.tgz#08de79f54eb3406f9daaf77c76e35313da963963" - integrity sha512-jT/qyKZ9rzLErtrjGgdkMBn2OP8wl0G3sQlBb3YPryvKHsjvINUhVaPFfP+fpBcOkmrVOVEEHQFJ7nbj2TH2gw== +"@emotion/use-insertion-effect-with-fallbacks@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.1.0.tgz#1a818a0b2c481efba0cf34e5ab1e0cb2dcb9dfaf" + integrity sha512-+wBOcIV5snwGgI2ya3u99D7/FJquOIniQT1IKyDsBmEgwvpxMNeS65Oib7OnE2d2aY+3BU4OiH+0Wchf8yk3Hw== "@emotion/utils@^0.8.2": version "0.8.2" resolved "https://registry.npmjs.org/@emotion/utils/-/utils-0.8.2.tgz" integrity sha512-rLu3wcBWH4P5q1CGoSSH/i9hrXs7SlbRLkoq9IGuoPYNGQvDJ3pt/wmOM+XgYjIDRMVIdkUWt0RsfzF50JfnCw== -"@emotion/utils@^1.3.0": - version "1.3.0" - resolved "https://registry.yarnpkg.com/@emotion/utils/-/utils-1.3.0.tgz#e170d859bdf5da2a705b3c83233ebe35fb7a50da" - integrity sha512-+M7u4EaX5t4bCunKTltAdGis3NFHQniikLVEQ+rPQccsX/xV4v5Etwg12paioZ9DsO+CTvimtmnjZbW85kbF8Q== +"@emotion/utils@^1.4.0": + version "1.4.0" + resolved "https://registry.yarnpkg.com/@emotion/utils/-/utils-1.4.0.tgz#262f1d02aaedb2ec91c83a0955dd47822ad5fbdd" + integrity sha512-spEnrA1b6hDR/C68lC2M7m6ALPUHZC0lIY7jAS/B/9DuuO1ZP04eov8SMv/6fwRd8pzmsn2AuJEznRREWlQrlQ== "@emotion/weak-memoize@^0.4.0": version "0.4.0" @@ -2159,28 +2274,28 @@ call-me-maybe "^1.0.1" glob-to-regexp "^0.3.0" -"@mui/core-downloads-tracker@^5.16.4": - version "5.16.4" - resolved "https://registry.yarnpkg.com/@mui/core-downloads-tracker/-/core-downloads-tracker-5.16.4.tgz#a34de72acd7e81fdbcc7eeb07786205e90dda148" - integrity sha512-rNdHXhclwjEZnK+//3SR43YRx0VtjdHnUFhMSGYmAMJve+KiwEja/41EYh8V3pZKqF2geKyfcFUenTfDTYUR4w== +"@mui/core-downloads-tracker@^5.16.5": + version "5.16.5" + resolved "https://registry.yarnpkg.com/@mui/core-downloads-tracker/-/core-downloads-tracker-5.16.5.tgz#396c7e133a0705c8d04c8ef36edad7ad94cb4981" + integrity sha512-ziFn1oPm6VjvHQcdGcAO+fXvOQEgieIj0BuSqcltFU+JXIxjPdVYNTdn2HU7/Ak5Gabk6k2u7+9PV7oZ6JT5sA== -"@mui/icons-material@^5.16.4": - version "5.16.4" - resolved "https://registry.yarnpkg.com/@mui/icons-material/-/icons-material-5.16.4.tgz#8c7e228c1e178992d89fab47e057222c8209bd7b" - integrity sha512-j9/CWctv6TH6Dou2uR2EH7UOgu79CW/YcozxCYVLJ7l03pCsiOlJ5sBArnWJxJ+nGkFwyL/1d1k8JEPMDR125A== +"@mui/icons-material@^5.16.5": + version "5.16.5" + resolved "https://registry.yarnpkg.com/@mui/icons-material/-/icons-material-5.16.5.tgz#53cdd03132315c8daff2200d146035f34c913470" + integrity sha512-bn88xxU/J9UV0s6+eutq7o3TTOrOlbCX+KshFb8kxgIxJZZfYz3JbAXVMivvoMF4Md6jCVUzM9HEkf4Ajab4tw== dependencies: "@babel/runtime" "^7.23.9" -"@mui/material@^5.16.4": - version "5.16.4" - resolved "https://registry.yarnpkg.com/@mui/material/-/material-5.16.4.tgz#992d630637d9d38620e4937fb11d0a97965fdabf" - integrity sha512-dBnh3/zRYgEVIS3OE4oTbujse3gifA0qLMmuUk13ywsDCbngJsdgwW5LuYeiT5pfA8PGPGSqM7mxNytYXgiMCw== +"@mui/material@^5.16.5": + version "5.16.5" + resolved "https://registry.yarnpkg.com/@mui/material/-/material-5.16.5.tgz#7989b088073f88c2d19501cc947899d811556089" + integrity sha512-eQrjjg4JeczXvh/+8yvJkxWIiKNHVptB/AqpsKfZBWp5mUD5U3VsjODMuUl1K2BSq0omV3CiO/mQmWSSMKSmaA== dependencies: "@babel/runtime" "^7.23.9" - "@mui/core-downloads-tracker" "^5.16.4" - "@mui/system" "^5.16.4" + "@mui/core-downloads-tracker" "^5.16.5" + "@mui/system" "^5.16.5" "@mui/types" "^7.2.15" - "@mui/utils" "^5.16.4" + "@mui/utils" "^5.16.5" "@popperjs/core" "^2.11.8" "@types/react-transition-group" "^4.4.10" clsx "^2.1.0" @@ -2189,13 +2304,13 @@ react-is "^18.3.1" react-transition-group "^4.4.5" -"@mui/private-theming@^5.16.4": - version "5.16.4" - resolved "https://registry.yarnpkg.com/@mui/private-theming/-/private-theming-5.16.4.tgz#0118f137975b35dc4774c6d593b8fcf86594c3fc" - integrity sha512-ZsAm8cq31SJ37SVWLRlu02v9SRthxnfQofaiv14L5Bht51B0dz6yQEoVU/V8UduZDCCIrWkBHuReVfKhE/UuXA== +"@mui/private-theming@^5.16.5": + version "5.16.5" + resolved "https://registry.yarnpkg.com/@mui/private-theming/-/private-theming-5.16.5.tgz#b90afcfa76ea50778453c633656ff59cb1b5494d" + integrity sha512-CSLg0YkpDqg0aXOxtjo3oTMd3XWMxvNb5d0v4AYVqwOltU8q6GvnZjhWyCLjGSCrcgfwm6/VDjaKLPlR14wxIA== dependencies: "@babel/runtime" "^7.23.9" - "@mui/utils" "^5.16.4" + "@mui/utils" "^5.16.5" prop-types "^15.8.1" "@mui/styled-engine@^5.16.4": @@ -2208,16 +2323,16 @@ csstype "^3.1.3" prop-types "^15.8.1" -"@mui/system@^5.16.4": - version "5.16.4" - resolved "https://registry.yarnpkg.com/@mui/system/-/system-5.16.4.tgz#c03f971ed273f0ad06c69c949c05e866ad211407" - integrity sha512-ET1Ujl2/8hbsD611/mqUuNArMCGv/fIWO/f8B3ZqF5iyPHM2aS74vhTNyjytncc4i6dYwGxNk+tLa7GwjNS0/w== +"@mui/system@^5.16.5": + version "5.16.5" + resolved "https://registry.yarnpkg.com/@mui/system/-/system-5.16.5.tgz#a90239e1467f7fce960167939dde9f44f6869484" + integrity sha512-uzIUGdrWddUx1HPxW4+B2o4vpgKyRxGe/8BxbfXVDPNPHX75c782TseoCnR/VyfnZJfqX87GcxDmnZEE1c031g== dependencies: "@babel/runtime" "^7.23.9" - "@mui/private-theming" "^5.16.4" + "@mui/private-theming" "^5.16.5" "@mui/styled-engine" "^5.16.4" "@mui/types" "^7.2.15" - "@mui/utils" "^5.16.4" + "@mui/utils" "^5.16.5" clsx "^2.1.0" csstype "^3.1.3" prop-types "^15.8.1" @@ -2227,12 +2342,13 @@ resolved "https://registry.yarnpkg.com/@mui/types/-/types-7.2.15.tgz#dadd232fe9a70be0d526630675dff3b110f30b53" integrity sha512-nbo7yPhtKJkdf9kcVOF8JZHPZTmqXjJ/tI0bdWgHg5tp9AnIN4Y7f7wm9T+0SyGYJk76+GYZ8Q5XaTYAsUHN0Q== -"@mui/utils@^5.16.4": - version "5.16.4" - resolved "https://registry.yarnpkg.com/@mui/utils/-/utils-5.16.4.tgz#8e50e27a630e3d8eeb3e9d3bc31cbb0e4956f5fd" - integrity sha512-nlppYwq10TBIFqp7qxY0SvbACOXeOjeVL3pOcDsK0FT8XjrEXh9/+lkg8AEIzD16z7YfiJDQjaJG2OLkE7BxNg== +"@mui/utils@^5.16.5": + version "5.16.5" + resolved "https://registry.yarnpkg.com/@mui/utils/-/utils-5.16.5.tgz#3a16877a80166a7f8b58c893d08e0993040fc49e" + integrity sha512-CwhcA9y44XwK7k2joL3Y29mRUnoBt+gOZZdGyw7YihbEwEErJYBtDwbZwVgH68zAljGe/b+Kd5bzfl63Gi3R2A== dependencies: "@babel/runtime" "^7.23.9" + "@mui/types" "^7.2.15" "@types/prop-types" "^15.7.12" clsx "^2.1.1" prop-types "^15.8.1" @@ -4038,10 +4154,10 @@ dependencies: "@types/node" "*" -"@types/node@*", "@types/node@^20.14.11": - version "20.14.11" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.14.11.tgz#09b300423343460455043ddd4d0ded6ac579b74b" - integrity sha512-kprQpL8MMeszbz6ojB5/tU8PLN4kesnN8Gjzw349rDlNgsSzg90lAVj3llK99Dh7JON+t9AuscPPFW6mPbTnSA== +"@types/node@*", "@types/node@^20.14.12": + version "20.14.12" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.14.12.tgz#129d7c3a822cb49fc7ff661235f19cfefd422b49" + integrity sha512-r7wNXakLeSsGT0H1AU863vS2wa5wBOK4bWMjZz2wj+8nBx+m5PeIn0k8AloSLpRuiwdRQZwarZqHE4FNArPuJQ== dependencies: undici-types "~5.26.4" @@ -5025,10 +5141,10 @@ anymatch@^3.0.0, anymatch@^3.0.3, anymatch@~3.1.2: normalize-path "^3.0.0" picomatch "^2.0.4" -apexcharts@^3.50.0: - version "3.50.0" - resolved "https://registry.yarnpkg.com/apexcharts/-/apexcharts-3.50.0.tgz#9030f206183978df0d762602b3d15b59ec6e783b" - integrity sha512-LJT1PNAm+NoIU3aogL2P+ViC0y/Cjik54FdzzGV54UNnGQLBoLe5ok3fxsJDTgyez45BGYT8gqNpYKqhdfy5sg== +apexcharts@^3.51.0: + version "3.51.0" + resolved "https://registry.yarnpkg.com/apexcharts/-/apexcharts-3.51.0.tgz#f99d8a7f49045b61bab795522f35233faac5fe94" + integrity sha512-WpCdVdGiJjf9SAyEeg2rl3q5OqCcNqiEmH0+filMraUiH6Vqyn5GFeMMyH0pon44xjNr1G0xzIRERKRmsGEuRA== dependencies: "@yr/monotone-cubic-spline" "^1.0.3" svg.draggable.js "^2.2.2" @@ -5237,16 +5353,6 @@ array.prototype.reduce@^1.0.5: es-array-method-boxes-properly "^1.0.0" is-string "^1.0.7" -array.prototype.toreversed@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/array.prototype.toreversed/-/array.prototype.toreversed-1.1.2.tgz#b989a6bf35c4c5051e1dc0325151bf8088954eba" - integrity sha512-wwDCoT4Ck4Cz7sLtgUmzR5UV3YF5mFHUlbChCzZBQZ+0m2cl/DH3tKgvphv1nKgFsJ48oCSg6p91q2Vm0I/ZMA== - dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - es-shim-unscopables "^1.0.0" - array.prototype.tosorted@^1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/array.prototype.tosorted/-/array.prototype.tosorted-1.1.4.tgz#fe954678ff53034e717ea3352a03f0b0b86f7ffc" @@ -8691,15 +8797,14 @@ eslint-plugin-react-hooks@^4.6.2: resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.2.tgz#c829eb06c0e6f484b3fbb85a97e57784f328c596" integrity sha512-QzliNJq4GinDBcD8gPB5v0wh6g8q3SUi6EFF0x8N/BL9PoVs0atuGc47ozMRyOWAKdwaZ5OnbOEa3WR+dSGKuQ== -eslint-plugin-react@^7.34.4: - version "7.34.4" - resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.34.4.tgz#1f0dc313a0937db7ce15fd1f6c3d77e70f3e02fb" - integrity sha512-Np+jo9bUwJNxCsT12pXtrGhJgT3T44T1sHhn1Ssr42XFn8TES0267wPGo5nNrMHi8qkyimDAX2BUmkf9pSaVzA== +eslint-plugin-react@^7.35.0: + version "7.35.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.35.0.tgz#00b1e4559896710e58af6358898f2ff917ea4c41" + integrity sha512-v501SSMOWv8gerHkk+IIQBkcGRGrO2nfybfj5pLxuJNFTPxxA3PSryhXTK+9pNbtkggheDdsC0E9Q8CuPk6JKA== dependencies: array-includes "^3.1.8" array.prototype.findlast "^1.2.5" array.prototype.flatmap "^1.3.2" - array.prototype.toreversed "^1.1.2" array.prototype.tosorted "^1.1.4" doctrine "^2.1.0" es-iterator-helpers "^1.0.19" @@ -16400,10 +16505,10 @@ synchronous-promise@^2.0.15: resolved "https://registry.yarnpkg.com/synchronous-promise/-/synchronous-promise-2.0.17.tgz#38901319632f946c982152586f2caf8ddc25c032" integrity sha512-AsS729u2RHUfEra9xJrE39peJcc2stq2+poBXX8bcM08Y6g9j/i/PUzwNQqkaJde7Ntg1TO7bSREbR5sdosQ+g== -tailwindcss@^3.4.6: - version "3.4.6" - resolved "https://registry.yarnpkg.com/tailwindcss/-/tailwindcss-3.4.6.tgz#41faae16607e0916da1eaa4a3b44053457ba70dd" - integrity sha512-1uRHzPB+Vzu57ocybfZ4jh5Q3SdlH7XW23J5sQoM9LhE9eIOlzxer/3XPSsycvih3rboRsvt0QCmzSrqyOYUIA== +tailwindcss@^3.4.7: + version "3.4.7" + resolved "https://registry.yarnpkg.com/tailwindcss/-/tailwindcss-3.4.7.tgz#6092f18767f5933f59375b9afe558e592fc77201" + integrity sha512-rxWZbe87YJb4OcSopb7up2Ba4U82BoiSGUdoDr3Ydrg9ckxFS/YWsvhN323GMcddgU65QRy7JndC7ahhInhvlQ== dependencies: "@alloc/quick-lru" "^5.2.0" arg "^5.0.2" @@ -17151,10 +17256,10 @@ unist-util-visit@2.0.3, unist-util-visit@^2.0.0: unist-util-is "^4.0.0" unist-util-visit-parents "^3.0.0" -universal-cookie@^7.1.4: - version "7.1.4" - resolved "https://registry.yarnpkg.com/universal-cookie/-/universal-cookie-7.1.4.tgz#d11bb95e405639c0ff0b467a64a5ccc5ce97dfc6" - integrity sha512-Q+DVJsdykStWRMtXr2Pdj3EF98qZHUH/fXv/gwFz/unyToy1Ek1w5GsWt53Pf38tT8Gbcy5QNsj61Xe9TggP4g== +universal-cookie@^7.2.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/universal-cookie/-/universal-cookie-7.2.0.tgz#1f3fa9c575d863ac41b4e42272d240ae2d32c047" + integrity sha512-PvcyflJAYACJKr28HABxkGemML5vafHmiL4ICe3e+BEKXRMt0GaFLZhAwgv637kFFnnfiSJ8e6jknrKkMrU+PQ== dependencies: "@types/cookie" "^0.6.0" cookie "^0.6.0" From 296644683b422279ff50b6c6d8bb0d11edf6de69 Mon Sep 17 00:00:00 2001 From: replicated-ci-kots <91219917+replicated-ci-kots@users.noreply.github.com> Date: Mon, 29 Jul 2024 20:40:17 +0000 Subject: [PATCH 016/123] Update KOTS image dependency tags (#4790) Co-authored-by: dydx <25685+dydx@users.noreply.github.com> --- .image.env | 2 +- Makefile | 2 +- pkg/image/constants.go | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.image.env b/.image.env index 812445cbf1..c3f5f1db5c 100644 --- a/.image.env +++ b/.image.env @@ -2,7 +2,7 @@ # most recent tag is interpolated from the source repository and used to generate a fully qualified image # name. MINIO_TAG='0.20240726.204821-r0' -RQLITE_TAG='8.26.7-r0' +RQLITE_TAG='8.26.8-r0' DEX_TAG='2.40.0-r3' SCHEMAHERO_TAG='0.17.9' LVP_TAG='v0.6.7' \ No newline at end of file diff --git a/Makefile b/Makefile index 968a2ce62a..4b1f1c04f4 100644 --- a/Makefile +++ b/Makefile @@ -1,7 +1,7 @@ include Makefile.build.mk CURRENT_USER := $(if $(GITHUB_USER),$(GITHUB_USER),$(shell id -u -n)) MINIO_TAG ?= 0.20240726.204821-r0 -RQLITE_TAG ?= 8.26.7-r0 +RQLITE_TAG ?= 8.26.8-r0 DEX_TAG ?= 2.40.0-r3 LVP_TAG ?= v0.6.7 diff --git a/pkg/image/constants.go b/pkg/image/constants.go index 57ab0de516..ee221975d1 100644 --- a/pkg/image/constants.go +++ b/pkg/image/constants.go @@ -6,7 +6,7 @@ package image const ( Minio = "kotsadm/minio:0.20240726.204821-r0" - Rqlite = "kotsadm/rqlite:8.26.7-r0" + Rqlite = "kotsadm/rqlite:8.26.8-r0" Dex = "kotsadm/dex:2.40.0-r3" Schemahero = "schemahero/schemahero:0.17.9" Lvp = "replicated/local-volume-provider:v0.6.7" From 17d80402165fabb8992c8bb0cc2c2548e9fc9534 Mon Sep 17 00:00:00 2001 From: replicated-ci-kots <91219917+replicated-ci-kots@users.noreply.github.com> Date: Tue, 30 Jul 2024 12:09:23 +0000 Subject: [PATCH 017/123] Update KOTS image dependency tags (#4791) Co-authored-by: dydx <25685+dydx@users.noreply.github.com> --- .image.env | 2 +- Makefile | 2 +- pkg/image/constants.go | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.image.env b/.image.env index c3f5f1db5c..09f3a8cd10 100644 --- a/.image.env +++ b/.image.env @@ -1,7 +1,7 @@ # Generated file, do not modify. This file is generated from a text file containing a list of images. The # most recent tag is interpolated from the source repository and used to generate a fully qualified image # name. -MINIO_TAG='0.20240726.204821-r0' +MINIO_TAG='0.20240729.221452-r0' RQLITE_TAG='8.26.8-r0' DEX_TAG='2.40.0-r3' SCHEMAHERO_TAG='0.17.9' diff --git a/Makefile b/Makefile index 4b1f1c04f4..814abce617 100644 --- a/Makefile +++ b/Makefile @@ -1,6 +1,6 @@ include Makefile.build.mk CURRENT_USER := $(if $(GITHUB_USER),$(GITHUB_USER),$(shell id -u -n)) -MINIO_TAG ?= 0.20240726.204821-r0 +MINIO_TAG ?= 0.20240729.221452-r0 RQLITE_TAG ?= 8.26.8-r0 DEX_TAG ?= 2.40.0-r3 LVP_TAG ?= v0.6.7 diff --git a/pkg/image/constants.go b/pkg/image/constants.go index ee221975d1..b9e6332274 100644 --- a/pkg/image/constants.go +++ b/pkg/image/constants.go @@ -5,7 +5,7 @@ package image // image name. const ( - Minio = "kotsadm/minio:0.20240726.204821-r0" + Minio = "kotsadm/minio:0.20240729.221452-r0" Rqlite = "kotsadm/rqlite:8.26.8-r0" Dex = "kotsadm/dex:2.40.0-r3" Schemahero = "schemahero/schemahero:0.17.9" From c227eee6e29ee208c521e0aa90682e7dc0ac9143 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 30 Jul 2024 12:10:03 +0000 Subject: [PATCH 018/123] Bump github.com/docker/docker in the go_modules group (#4793) Bumps the go_modules group with 1 update: [github.com/docker/docker](https://github.com/docker/docker). Updates `github.com/docker/docker` from 26.1.3+incompatible to 26.1.4+incompatible - [Release notes](https://github.com/docker/docker/releases) - [Commits](https://github.com/docker/docker/compare/v26.1.3...v26.1.4) --- updated-dependencies: - dependency-name: github.com/docker/docker dependency-type: indirect dependency-group: go_modules ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index 009a874af8..1e8ebec6e9 100644 --- a/go.mod +++ b/go.mod @@ -161,7 +161,7 @@ require ( github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect github.com/docker/cli v26.1.3+incompatible // indirect github.com/docker/distribution v2.8.3+incompatible // indirect - github.com/docker/docker v26.1.3+incompatible // indirect + github.com/docker/docker v26.1.4+incompatible // indirect github.com/docker/docker-credential-helpers v0.8.1 // indirect github.com/docker/go-connections v0.5.0 // indirect github.com/docker/go-events v0.0.0-20190806004212-e31b211e4f1c // indirect diff --git a/go.sum b/go.sum index 9c33802fbb..00502e24fc 100644 --- a/go.sum +++ b/go.sum @@ -481,8 +481,8 @@ github.com/docker/distribution v0.0.0-20171011171712-7484e51bf6af/go.mod h1:J2gT github.com/docker/distribution v2.8.3+incompatible h1:AtKxIZ36LoNK51+Z6RpzLpddBirtxJnzDrHLEKxTAYk= github.com/docker/distribution v2.8.3+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= github.com/docker/docker v0.7.3-0.20190327010347-be7ac8be2ae0/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= -github.com/docker/docker v26.1.3+incompatible h1:lLCzRbrVZrljpVNobJu1J2FHk8V0s4BawoZippkc+xo= -github.com/docker/docker v26.1.3+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= +github.com/docker/docker v26.1.4+incompatible h1:vuTpXDuoga+Z38m1OZHzl7NKisKWaWlhjQk7IDPSLsU= +github.com/docker/docker v26.1.4+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= github.com/docker/docker-credential-helpers v0.8.1 h1:j/eKUktUltBtMzKqmfLB0PAgqYyMHOp5vfsD1807oKo= github.com/docker/docker-credential-helpers v0.8.1/go.mod h1:P3ci7E3lwkZg6XiHdRKft1KckHiO9a2rNtyFbZ/ry9M= github.com/docker/go-connections v0.5.0 h1:USnMq7hx7gwdVZq1L49hLXaFtUdTADjXGp+uj1Br63c= From fcfbfef5724d9d4d474a1b494a105c17593266c6 Mon Sep 17 00:00:00 2001 From: Gerard Nguyen Date: Wed, 31 Jul 2024 07:49:32 +1000 Subject: [PATCH 019/123] parse k8s minor version for eks (#4792) --- pkg/k8sutil/clientset.go | 11 ++++++++++- pkg/k8sutil/clientset_test.go | 1 + 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/pkg/k8sutil/clientset.go b/pkg/k8sutil/clientset.go index f1f60a2435..363955d99f 100644 --- a/pkg/k8sutil/clientset.go +++ b/pkg/k8sutil/clientset.go @@ -3,6 +3,7 @@ package k8sutil import ( "context" "io" + "regexp" "strconv" "github.com/pkg/errors" @@ -103,7 +104,15 @@ func GetK8sMinorVersion(clientset kubernetes.Interface) (int, error) { return -1, errors.Wrap(err, "failed to get kubernetes server version") } - k8sMinorVersion, err := strconv.Atoi(k8sVersion.Minor) + // remove + sign from Minor version if any (for EKS) + // https://github.com/aws/containers-roadmap/issues/1404 + reg := regexp.MustCompile(`[0-9]+`) + minorVersion := reg.FindString(k8sVersion.Minor) + if minorVersion == "" { + return -1, errors.New("failed to get k8s minor version") + } + + k8sMinorVersion, err := strconv.Atoi(minorVersion) if err != nil { return -1, errors.Wrap(err, "failed to convert k8s minor version to int") } diff --git a/pkg/k8sutil/clientset_test.go b/pkg/k8sutil/clientset_test.go index 51ecb61ab8..bbbd66aef0 100644 --- a/pkg/k8sutil/clientset_test.go +++ b/pkg/k8sutil/clientset_test.go @@ -31,6 +31,7 @@ func TestGetK8sMinorVersion(t *testing.T) { {"expect minor version 22", args{mockClientsetK8sVersion("1", "22")}, 22, false}, {"expect minor version 21", args{mockClientsetK8sVersion("1", "21")}, 21, false}, {"expect minor version conversion error", args{mockClientsetK8sVersion("1", "a")}, -1, true}, + {"expect minor version 30", args{mockClientsetK8sVersion("1", "30+")}, 30, false}, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { From 5670906832ce9c0087e37d425c60317a80872f08 Mon Sep 17 00:00:00 2001 From: Mia Wong Date: Wed, 31 Jul 2024 12:47:50 -0400 Subject: [PATCH 020/123] Embedded Cluster upgrade: Rerun preflights when config has changed (#4794) --- web/src/components/upgrade_service/AppConfig.tsx | 12 +++++++++++- .../upgrade_service/PreflightChecks.tsx | 16 ++++++++++++++-- .../upgrade_service/UpgradeServiceContext.tsx | 4 ++++ 3 files changed, 29 insertions(+), 3 deletions(-) diff --git a/web/src/components/upgrade_service/AppConfig.tsx b/web/src/components/upgrade_service/AppConfig.tsx index 91fe37c5e1..0fba036735 100644 --- a/web/src/components/upgrade_service/AppConfig.tsx +++ b/web/src/components/upgrade_service/AppConfig.tsx @@ -12,6 +12,7 @@ import { withRouter } from "@src/utilities/react-router-utilities"; import { useUpgradeServiceContext } from "./UpgradeServiceContext"; import "@src/scss/components/watches/WatchConfig.scss"; +import { isEqual } from "lodash"; // This was typed from the implementation of the component so it might be wrong type ConfigGroup = { @@ -62,7 +63,8 @@ export const AppConfig = ({ const navigate = useNavigate(); const params = useParams(); - const { config, setConfig } = useUpgradeServiceContext(); + const { config, setConfig, prevConfig, setPrevConfig } = + useUpgradeServiceContext(); const [state, setState] = useReducer( (currentState, newState) => ({ ...currentState, ...newState }), @@ -185,6 +187,14 @@ export const AppConfig = ({ setCurrentStep(0); }, []); + useEffect(() => { + if (!isEqual(config, prevConfig)) { + // Config has changed + setPrevConfig(config); + // Perform actions + } + }, [config, prevConfig]); + const markRequiredItems = (requiredItems: RequiredItems) => { const configGroups = state.configGroups; requiredItems.forEach((requiredItem) => { diff --git a/web/src/components/upgrade_service/PreflightChecks.tsx b/web/src/components/upgrade_service/PreflightChecks.tsx index 89a7a511f5..9adbcff7ac 100644 --- a/web/src/components/upgrade_service/PreflightChecks.tsx +++ b/web/src/components/upgrade_service/PreflightChecks.tsx @@ -12,6 +12,7 @@ import { useGetPrelightResults, useRerunPreflights } from "./hooks/index"; import { KotsParams } from "@types"; import { useUpgradeServiceContext } from "./UpgradeServiceContext"; +import { isEqual } from "lodash"; const PreflightCheck = ({ setCurrentStep, @@ -25,8 +26,12 @@ const PreflightCheck = ({ setShowConfirmIgnorePreflightsModal, ] = useState(false); - const { setIsSkipPreflights, setContinueWithFailedPreflights } = - useUpgradeServiceContext(); + const { + setIsSkipPreflights, + setContinueWithFailedPreflights, + prevConfig, + config, + } = useUpgradeServiceContext(); const { sequence = "0", slug } = useParams() as KotsParams; @@ -43,6 +48,13 @@ const PreflightCheck = ({ useEffect(() => { setCurrentStep(1); + + if ( + !isEqual(prevConfig, config) && + preflightCheck?.preflightResults.length > 0 + ) { + rerunPreflights(); + } }, []); const handleIgnorePreflights = () => { diff --git a/web/src/components/upgrade_service/UpgradeServiceContext.tsx b/web/src/components/upgrade_service/UpgradeServiceContext.tsx index e61c95b9ac..d1b5d2474e 100644 --- a/web/src/components/upgrade_service/UpgradeServiceContext.tsx +++ b/web/src/components/upgrade_service/UpgradeServiceContext.tsx @@ -4,16 +4,20 @@ export const UpgradeServiceContext = createContext(null); export const UpgradeServiceProvider = ({ children }) => { const [config, setConfig] = useState(null); + const [prevConfig, setPrevConfig] = useState(null); const [isSkipPreflights, setIsSkipPreflights] = useState(false); const [continueWithFailedPreflights, setContinueWithFailedPreflights] = useState(true); + return ( Date: Wed, 31 Jul 2024 10:32:19 -0700 Subject: [PATCH 021/123] Fix the admin-console upgrade CLI command help text (#4796) --- cmd/kots/cli/admin-console-upgrade.go | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/cmd/kots/cli/admin-console-upgrade.go b/cmd/kots/cli/admin-console-upgrade.go index 2c63851a88..7af772e040 100644 --- a/cmd/kots/cli/admin-console-upgrade.go +++ b/cmd/kots/cli/admin-console-upgrade.go @@ -1,6 +1,7 @@ package cli import ( + "fmt" "os" "strconv" "strings" @@ -8,6 +9,7 @@ import ( "github.com/manifoldco/promptui" "github.com/pkg/errors" + "github.com/replicatedhq/kots/pkg/buildversion" "github.com/replicatedhq/kots/pkg/k8sutil" "github.com/replicatedhq/kots/pkg/kotsadm" kotsadmtypes "github.com/replicatedhq/kots/pkg/kotsadm/types" @@ -20,8 +22,8 @@ import ( func AdminConsoleUpgradeCmd() *cobra.Command { cmd := &cobra.Command{ Use: "upgrade", - Short: "Upgrade the admin console to the latest version", - Long: "Upgrade the admin console to the latest version", + Short: fmt.Sprintf("Upgrade the admin console to version %s", buildversion.Version()), + Long: "", SilenceUsage: true, SilenceErrors: false, PreRun: func(cmd *cobra.Command, args []string) { From a60f47a7f63ac5f49e24816eed7cc77f7b9161b4 Mon Sep 17 00:00:00 2001 From: replicated-ci-kots <91219917+replicated-ci-kots@users.noreply.github.com> Date: Thu, 1 Aug 2024 12:09:44 +0000 Subject: [PATCH 022/123] Update KOTS image dependency tags (#4797) Co-authored-by: dydx <25685+dydx@users.noreply.github.com> --- .image.env | 2 +- Makefile | 2 +- pkg/image/constants.go | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.image.env b/.image.env index 09f3a8cd10..cd1511d45c 100644 --- a/.image.env +++ b/.image.env @@ -1,7 +1,7 @@ # Generated file, do not modify. This file is generated from a text file containing a list of images. The # most recent tag is interpolated from the source repository and used to generate a fully qualified image # name. -MINIO_TAG='0.20240729.221452-r0' +MINIO_TAG='0.20240731.054626-r0' RQLITE_TAG='8.26.8-r0' DEX_TAG='2.40.0-r3' SCHEMAHERO_TAG='0.17.9' diff --git a/Makefile b/Makefile index 814abce617..1cd85f360f 100644 --- a/Makefile +++ b/Makefile @@ -1,6 +1,6 @@ include Makefile.build.mk CURRENT_USER := $(if $(GITHUB_USER),$(GITHUB_USER),$(shell id -u -n)) -MINIO_TAG ?= 0.20240729.221452-r0 +MINIO_TAG ?= 0.20240731.054626-r0 RQLITE_TAG ?= 8.26.8-r0 DEX_TAG ?= 2.40.0-r3 LVP_TAG ?= v0.6.7 diff --git a/pkg/image/constants.go b/pkg/image/constants.go index b9e6332274..ae2b6359e7 100644 --- a/pkg/image/constants.go +++ b/pkg/image/constants.go @@ -5,7 +5,7 @@ package image // image name. const ( - Minio = "kotsadm/minio:0.20240729.221452-r0" + Minio = "kotsadm/minio:0.20240731.054626-r0" Rqlite = "kotsadm/rqlite:8.26.8-r0" Dex = "kotsadm/dex:2.40.0-r3" Schemahero = "schemahero/schemahero:0.17.9" From 53c875bfc82e72b66f921d08eb19cbaad90d7a06 Mon Sep 17 00:00:00 2001 From: Alex Parker <7272359+ajp-io@users.noreply.github.com> Date: Fri, 2 Aug 2024 12:54:08 -0400 Subject: [PATCH 023/123] Fix typo (#4798) * Fix typo * fix test flakiness --------- Co-authored-by: Salah Al Saleh --- e2e/playwright/tests/smoke-test/test.spec.ts | 1 - pkg/license/signature.go | 10 +++++----- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/e2e/playwright/tests/smoke-test/test.spec.ts b/e2e/playwright/tests/smoke-test/test.spec.ts index 41f9d33523..9e87a4130a 100644 --- a/e2e/playwright/tests/smoke-test/test.spec.ts +++ b/e2e/playwright/tests/smoke-test/test.spec.ts @@ -157,7 +157,6 @@ test('smoke test', async ({ page }) => { await expect(page.locator('#app')).toContainText('Full Snapshots (Instance)'); await page.getByRole('link', { name: 'Partial Snapshots (Application)' }).click(); await page.getByRole('button', { name: 'Start a snapshot' }).click(); - await expect(page.locator('#app')).toContainText('In Progress'); await expect(page.locator('#app')).toContainText('Completed', { timeout: 30000 }); await expect(page.getByText('It’s recommend that you use')).toBeVisible(); await page.getByText('Learn more').click(); diff --git a/pkg/license/signature.go b/pkg/license/signature.go index d523191381..7e16e00970 100644 --- a/pkg/license/signature.go +++ b/pkg/license/signature.go @@ -178,19 +178,19 @@ func verifyLicenseData(outerLicense *kotsv1beta1.License, innerLicense *kotsv1be return fmt.Errorf("entitlement %q not found in the inner license", k) } if outerEntitlement.Value.Value() != innerEntitlement.Value.Value() { - return fmt.Errorf("entitlement %q value has changed to %q (license) from %q (witin signature)", k, outerEntitlement.Value.Value(), innerEntitlement.Value.Value()) + return fmt.Errorf("entitlement %q value has changed to %q (license) from %q (within signature)", k, outerEntitlement.Value.Value(), innerEntitlement.Value.Value()) } if outerEntitlement.Title != innerEntitlement.Title { - return fmt.Errorf("entitlement %q title has changed to %q (license) from %q (witin signature)", k, outerEntitlement.Title, innerEntitlement.Title) + return fmt.Errorf("entitlement %q title has changed to %q (license) from %q (within signature)", k, outerEntitlement.Title, innerEntitlement.Title) } if outerEntitlement.Description != innerEntitlement.Description { - return fmt.Errorf("entitlement %q description has changed to %q (license) from %q (witin signature)", k, outerEntitlement.Description, innerEntitlement.Description) + return fmt.Errorf("entitlement %q description has changed to %q (license) from %q (within signature)", k, outerEntitlement.Description, innerEntitlement.Description) } if outerEntitlement.IsHidden != innerEntitlement.IsHidden { - return fmt.Errorf("entitlement %q hidden has changed to %t (license) from %t (witin signature)", k, outerEntitlement.IsHidden, innerEntitlement.IsHidden) + return fmt.Errorf("entitlement %q hidden has changed to %t (license) from %t (within signature)", k, outerEntitlement.IsHidden, innerEntitlement.IsHidden) } if outerEntitlement.ValueType != innerEntitlement.ValueType { - return fmt.Errorf("entitlement %q value type has changed to %q (license) from %q (witin signature)", k, outerEntitlement.ValueType, innerEntitlement.ValueType) + return fmt.Errorf("entitlement %q value type has changed to %q (license) from %q (within signature)", k, outerEntitlement.ValueType, innerEntitlement.ValueType) } } From 8f1f25180c5ce08e670a8a8bea693cbd3cdbfef1 Mon Sep 17 00:00:00 2001 From: Mia Wong Date: Fri, 2 Aug 2024 13:37:17 -0400 Subject: [PATCH 024/123] Fix error in Cluster Management page when clicking continue (#4795) --- pkg/handlers/embedded_cluster_confirm_cluster_management.go | 6 ------ web/src/components/PreflightResultPage.tsx | 6 ++++-- web/src/components/upgrade_service/ConfirmAndDeploy.tsx | 6 ++++-- web/src/components/upgrade_service/PreflightChecks.tsx | 4 +++- web/src/features/AppConfig/components/AppConfig.tsx | 4 ++-- web/src/features/PreflightChecks/api/getPreflightResult.tsx | 4 +++- 6 files changed, 16 insertions(+), 14 deletions(-) diff --git a/pkg/handlers/embedded_cluster_confirm_cluster_management.go b/pkg/handlers/embedded_cluster_confirm_cluster_management.go index 65aca71451..c42bb128cb 100644 --- a/pkg/handlers/embedded_cluster_confirm_cluster_management.go +++ b/pkg/handlers/embedded_cluster_confirm_cluster_management.go @@ -53,12 +53,6 @@ func (h *Handler) ConfirmEmbeddedClusterManagement(w http.ResponseWriter, r *htt } pendingVersion := downstreamVersions.PendingVersions[0] - if pendingVersion.Status != storetypes.VersionPendingClusterManagement { - logger.Error(fmt.Errorf("pending version is not in pending_cluster_management status")) - w.WriteHeader(http.StatusBadRequest) - return - } - archiveDir, err := os.MkdirTemp("", "kotsadm") if err != nil { logger.Error(fmt.Errorf("failed to create temp dir: %w", err)) diff --git a/web/src/components/PreflightResultPage.tsx b/web/src/components/PreflightResultPage.tsx index f3e2acfd1d..07662a1967 100644 --- a/web/src/components/PreflightResultPage.tsx +++ b/web/src/components/PreflightResultPage.tsx @@ -75,7 +75,7 @@ function PreflightResultPage(props: Props) { return (
-
+
{location.pathname.includes("version-history") && (
navigate(-1)}>
diff --git a/web/src/components/upgrade_service/ConfirmAndDeploy.tsx b/web/src/components/upgrade_service/ConfirmAndDeploy.tsx index db30542504..bfc6cddd5a 100644 --- a/web/src/components/upgrade_service/ConfirmAndDeploy.tsx +++ b/web/src/components/upgrade_service/ConfirmAndDeploy.tsx @@ -181,7 +181,7 @@ const ConfirmAndDeploy = ({ return (
-
+
{location.pathname.includes("version-history") && (
navigate(-1)}>
diff --git a/web/src/components/upgrade_service/PreflightChecks.tsx b/web/src/components/upgrade_service/PreflightChecks.tsx index 9adbcff7ac..4376381401 100644 --- a/web/src/components/upgrade_service/PreflightChecks.tsx +++ b/web/src/components/upgrade_service/PreflightChecks.tsx @@ -108,7 +108,9 @@ const PreflightCheck = ({ preflightCheck?.pendingPreflightCheckName || "" } percentage={ - preflightCheck?.pendingPreflightChecksPercentage || 0 + Math.round( + preflightCheck?.pendingPreflightChecksPercentage + ) || 0 } />
diff --git a/web/src/features/AppConfig/components/AppConfig.tsx b/web/src/features/AppConfig/components/AppConfig.tsx index c013917089..a26e0ed557 100644 --- a/web/src/features/AppConfig/components/AppConfig.tsx +++ b/web/src/features/AppConfig/components/AppConfig.tsx @@ -404,10 +404,10 @@ class AppConfig extends Component { const hasPreflight = app?.hasPreflight; if (hasPreflight) { - navigate(`/${slug}/preflight`, { replace: true }); + navigate(`/${slug}/preflight`); } else { await this.props.refetchApps(); - navigate(`/app/${slug}`, { replace: true }); + navigate(`/app/${slug}`); } } else { this.setState({ diff --git a/web/src/features/PreflightChecks/api/getPreflightResult.tsx b/web/src/features/PreflightChecks/api/getPreflightResult.tsx index 143d963db7..5e24bfcc45 100644 --- a/web/src/features/PreflightChecks/api/getPreflightResult.tsx +++ b/web/src/features/PreflightChecks/api/getPreflightResult.tsx @@ -189,7 +189,9 @@ function useGetPrelightResults({ setRefetchCount(0); }, refetchInterval: (preflightCheck: PreflightCheck | undefined) => { - if (!preflightCheck) return false; + if (!preflightCheck) return null; + + if (preflightCheck?.preflightResults.length > 0) return null; const refetchInterval = makeRefetchInterval(preflightCheck); From ac01a5ba7364d4b4b1e140461fff7d70f8dc4ac7 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 3 Aug 2024 06:09:12 +0000 Subject: [PATCH 025/123] Bump github.com/onsi/gomega from 1.34.0 to 1.34.1 in the security group (#4803) Bumps the security group with 1 update: [github.com/onsi/gomega](https://github.com/onsi/gomega). Updates `github.com/onsi/gomega` from 1.34.0 to 1.34.1 - [Release notes](https://github.com/onsi/gomega/releases) - [Changelog](https://github.com/onsi/gomega/blob/master/CHANGELOG.md) - [Commits](https://github.com/onsi/gomega/compare/v1.34.0...v1.34.1) --- updated-dependencies: - dependency-name: github.com/onsi/gomega dependency-type: direct:production update-type: version-update:semver-patch dependency-group: security ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- go.mod | 8 ++++---- go.sum | 16 ++++++++-------- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/go.mod b/go.mod index 1e8ebec6e9..70e4016a72 100644 --- a/go.mod +++ b/go.mod @@ -40,7 +40,7 @@ require ( github.com/mikesmitty/edkey v0.0.0-20170222072505-3356ea4e686a github.com/mitchellh/hashstructure v1.1.0 github.com/onsi/ginkgo/v2 v2.19.1 - github.com/onsi/gomega v1.34.0 + github.com/onsi/gomega v1.34.1 github.com/open-policy-agent/opa v0.67.0 github.com/opencontainers/image-spec v1.1.0 github.com/ory/dockertest/v3 v3.10.0 @@ -364,14 +364,14 @@ require ( go.opentelemetry.io/otel/trace v1.28.0 // indirect go.opentelemetry.io/proto/otlp v1.3.1 // indirect go.starlark.net v0.0.0-20230525235612-a134d8f9ddca // indirect - golang.org/x/exp v0.0.0-20240506185415-9bf2ced13842 // indirect - golang.org/x/mod v0.18.0 // indirect + golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56 // indirect + golang.org/x/mod v0.19.0 // indirect golang.org/x/net v0.27.0 // indirect golang.org/x/sys v0.22.0 // indirect golang.org/x/term v0.22.0 // indirect golang.org/x/text v0.16.0 // indirect golang.org/x/time v0.5.0 // indirect - golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d // indirect + golang.org/x/tools v0.23.0 // indirect google.golang.org/genproto v0.0.0-20240311173647-c811ad7063a7 // indirect google.golang.org/genproto/googleapis/api v0.0.0-20240701130421-f6361c86f094 // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20240701130421-f6361c86f094 // indirect diff --git a/go.sum b/go.sum index 00502e24fc..124eef0059 100644 --- a/go.sum +++ b/go.sum @@ -1223,8 +1223,8 @@ github.com/onsi/gomega v1.3.0/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5 github.com/onsi/gomega v1.4.2/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= github.com/onsi/gomega v1.5.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= github.com/onsi/gomega v1.7.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= -github.com/onsi/gomega v1.34.0 h1:eSSPsPNp6ZpsG8X1OVmOTxig+CblTc4AxpPBykhe2Os= -github.com/onsi/gomega v1.34.0/go.mod h1:MIKI8c+f+QLWk+hxbePD4i0LMJSExPaZOVfkoex4cAo= +github.com/onsi/gomega v1.34.1 h1:EUMJIKUjM8sKjYbtxQI9A4z2o+rruxnzNvpknOXie6k= +github.com/onsi/gomega v1.34.1/go.mod h1:kU1QgUvBDLXBJq618Xvm2LUX6rSAfRaFRTcdOeDLwwY= github.com/open-policy-agent/opa v0.67.0 h1:FOdsO9yNhfmrh+72oVK7ImWmzruG+VSpfbr5IBqEWVs= github.com/open-policy-agent/opa v0.67.0/go.mod h1:aqKlHc8E2VAAylYE9x09zJYr/fYzGX+JKne89UGqFzk= github.com/opencontainers/go-digest v1.0.0-rc1/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s= @@ -1644,8 +1644,8 @@ golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u0 golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= -golang.org/x/exp v0.0.0-20240506185415-9bf2ced13842 h1:vr/HnozRka3pE4EsMEg1lgkXJkTFJCVUX+S/ZT6wYzM= -golang.org/x/exp v0.0.0-20240506185415-9bf2ced13842/go.mod h1:XtvwrStGgqGPLc4cjQfWqZHG1YFdYs6swckp8vpsjnc= +golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56 h1:2dVuKD2vS7b0QIHQbpyTISPd0LeHDbnYEryqj5Q1ug8= +golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56/go.mod h1:M4RDyNAINzryxdtnbRXRL/OHtkFuWGRjvuhBJpk2IlY= golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= @@ -1673,8 +1673,8 @@ golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= -golang.org/x/mod v0.18.0 h1:5+9lSbEzPSdWkH32vYPBwEpX8KwDbM52Ud9xBUvNlb0= -golang.org/x/mod v0.18.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= +golang.org/x/mod v0.19.0 h1:fEdghXQSo20giMthA7cd28ZC+jts4amQ3YMXiP5oMQ8= +golang.org/x/mod v0.19.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= golang.org/x/net v0.0.0-20170114055629-f2499483f923/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20170915142106-8351a756f30f/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180112015858-5ccada7d0a7b/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -2016,8 +2016,8 @@ golang.org/x/tools v0.1.4/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= -golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d h1:vU5i/LfpvrRCpgM/VPfJLg5KjxD3E+hfT1SH+d9zLwg= -golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d/go.mod h1:aiJjzUbINMkxbQROHiO6hDPo2LHcIPhhQsa9DLh0yGk= +golang.org/x/tools v0.23.0 h1:SGsXPZ+2l4JsgaCKkx+FQ9YZ5XEtA1GZYuoDjenLjvg= +golang.org/x/tools v0.23.0/go.mod h1:pnu6ufv6vQkll6szChhK3C3L/ruaIv5eBeztNG8wtsI= golang.org/x/xerrors v0.0.0-20190410155217-1f06c39b4373/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20190513163551-3ee3066db522/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= From 71f12f7898b496345409a9df94a8051ffe5c7ff1 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 3 Aug 2024 06:09:46 +0000 Subject: [PATCH 026/123] Bump github.com/gosimple/slug from 1.13.1 to 1.14.0 (#4804) Bumps [github.com/gosimple/slug](https://github.com/gosimple/slug) from 1.13.1 to 1.14.0. - [Release notes](https://github.com/gosimple/slug/releases) - [Commits](https://github.com/gosimple/slug/compare/v1.13.1...v1.14.0) --- updated-dependencies: - dependency-name: github.com/gosimple/slug dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index 70e4016a72..8b3809fc1e 100644 --- a/go.mod +++ b/go.mod @@ -30,7 +30,7 @@ require ( github.com/google/uuid v1.6.0 github.com/gorilla/mux v1.8.1 github.com/gorilla/websocket v1.5.3 - github.com/gosimple/slug v1.13.1 + github.com/gosimple/slug v1.14.0 github.com/hashicorp/go-cleanhttp v0.5.2 github.com/heroku/docker-registry-client v0.0.0-20190909225348-afc9e1acc3d5 github.com/lib/pq v1.10.9 diff --git a/go.sum b/go.sum index 124eef0059..ba629b5d88 100644 --- a/go.sum +++ b/go.sum @@ -874,8 +874,8 @@ github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoA github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= github.com/gorilla/websocket v1.5.3 h1:saDtZ6Pbx/0u+bgYQ3q96pZgCzfhKXGPqt7kZ72aNNg= github.com/gorilla/websocket v1.5.3/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= -github.com/gosimple/slug v1.13.1 h1:bQ+kpX9Qa6tHRaK+fZR0A0M2Kd7Pa5eHPPsb1JpHD+Q= -github.com/gosimple/slug v1.13.1/go.mod h1:UiRaFH+GEilHstLUmcBgWcI42viBN7mAb818JrYOeFQ= +github.com/gosimple/slug v1.14.0 h1:RtTL/71mJNDfpUbCOmnf/XFkzKRtD6wL6Uy+3akm4Es= +github.com/gosimple/slug v1.14.0/go.mod h1:UiRaFH+GEilHstLUmcBgWcI42viBN7mAb818JrYOeFQ= github.com/gosimple/unidecode v1.0.1 h1:hZzFTMMqSswvf0LBJZCZgThIZrpDHFXux9KeGmn6T/o= github.com/gosimple/unidecode v1.0.1/go.mod h1:CP0Cr1Y1kogOtx0bJblKzsVWrqYaqfNOnHzpgWw4Awc= github.com/gostaticanalysis/analysisutil v0.0.0-20190318220348-4088753ea4d3/go.mod h1:eEOZF4jCKGi+aprrirO9e7WKB3beBRtWgqGunKl6pKE= From e016ecb8ce86cd9ae94a49f334487f8508f12376 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 3 Aug 2024 12:08:14 +0000 Subject: [PATCH 027/123] Bump the security group in /web with 7 updates (#4801) Bumps the security group in /web with 7 updates: | Package | From | To | | --- | --- | --- | | [@mui/icons-material](https://github.com/mui/material-ui/tree/HEAD/packages/mui-icons-material) | `5.16.5` | `5.16.6` | | [@mui/material](https://github.com/mui/material-ui/tree/HEAD/packages/mui-material) | `5.16.5` | `5.16.6` | | [axios](https://github.com/axios/axios) | `1.7.2` | `1.7.3` | | [react-router-dom](https://github.com/remix-run/react-router/tree/HEAD/packages/react-router-dom) | `6.25.1` | `6.26.0` | | [@babel/core](https://github.com/babel/babel/tree/HEAD/packages/babel-core) | `7.24.9` | `7.25.2` | | [@babel/eslint-parser](https://github.com/babel/babel/tree/HEAD/eslint/babel-eslint-parser) | `7.25.0` | `7.25.1` | | [@babel/preset-env](https://github.com/babel/babel/tree/HEAD/packages/babel-preset-env) | `7.25.0` | `7.25.3` | Updates `@mui/icons-material` from 5.16.5 to 5.16.6 - [Release notes](https://github.com/mui/material-ui/releases) - [Changelog](https://github.com/mui/material-ui/blob/v5.16.6/CHANGELOG.md) - [Commits](https://github.com/mui/material-ui/commits/v5.16.6/packages/mui-icons-material) Updates `@mui/material` from 5.16.5 to 5.16.6 - [Release notes](https://github.com/mui/material-ui/releases) - [Changelog](https://github.com/mui/material-ui/blob/v5.16.6/CHANGELOG.md) - [Commits](https://github.com/mui/material-ui/commits/v5.16.6/packages/mui-material) Updates `axios` from 1.7.2 to 1.7.3 - [Release notes](https://github.com/axios/axios/releases) - [Changelog](https://github.com/axios/axios/blob/v1.x/CHANGELOG.md) - [Commits](https://github.com/axios/axios/compare/v1.7.2...v1.7.3) Updates `react-router-dom` from 6.25.1 to 6.26.0 - [Release notes](https://github.com/remix-run/react-router/releases) - [Changelog](https://github.com/remix-run/react-router/blob/main/packages/react-router-dom/CHANGELOG.md) - [Commits](https://github.com/remix-run/react-router/commits/react-router-dom@6.26.0/packages/react-router-dom) Updates `@babel/core` from 7.24.9 to 7.25.2 - [Release notes](https://github.com/babel/babel/releases) - [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md) - [Commits](https://github.com/babel/babel/commits/v7.25.2/packages/babel-core) Updates `@babel/eslint-parser` from 7.25.0 to 7.25.1 - [Release notes](https://github.com/babel/babel/releases) - [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md) - [Commits](https://github.com/babel/babel/commits/v7.25.1/eslint/babel-eslint-parser) Updates `@babel/preset-env` from 7.25.0 to 7.25.3 - [Release notes](https://github.com/babel/babel/releases) - [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md) - [Commits](https://github.com/babel/babel/commits/v7.25.3/packages/babel-preset-env) --- updated-dependencies: - dependency-name: "@mui/icons-material" dependency-type: direct:production update-type: version-update:semver-patch dependency-group: security - dependency-name: "@mui/material" dependency-type: direct:production update-type: version-update:semver-patch dependency-group: security - dependency-name: axios dependency-type: direct:production update-type: version-update:semver-patch dependency-group: security - dependency-name: react-router-dom dependency-type: direct:production update-type: version-update:semver-minor dependency-group: security - dependency-name: "@babel/core" dependency-type: direct:development update-type: version-update:semver-minor dependency-group: security - dependency-name: "@babel/eslint-parser" dependency-type: direct:development update-type: version-update:semver-patch dependency-group: security - dependency-name: "@babel/preset-env" dependency-type: direct:development update-type: version-update:semver-patch dependency-group: security ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- web/package.json | 14 +- web/yarn.lock | 329 +++++++++++++++++++---------------------------- 2 files changed, 139 insertions(+), 204 deletions(-) diff --git a/web/package.json b/web/package.json index 58dff68ca7..e375b40b9b 100644 --- a/web/package.json +++ b/web/package.json @@ -23,14 +23,14 @@ "devDependencies": { "@aws-sdk/types": "^3.609.0", "@babel/cli": "^7.24.8", - "@babel/core": "^7.24.9", - "@babel/eslint-parser": "^7.25.0", + "@babel/core": "^7.25.2", + "@babel/eslint-parser": "^7.25.1", "@babel/helper-get-function-arity": "^7.16.7", "@babel/plugin-proposal-class-properties": "7.18.6", "@babel/plugin-proposal-decorators": "7.24.7", "@babel/plugin-proposal-object-rest-spread": "7.20.7", "@babel/plugin-proposal-optional-chaining": "7.21.0", - "@babel/preset-env": "^7.25.0", + "@babel/preset-env": "^7.25.3", "@babel/preset-react": "^7.24.7", "@babel/preset-typescript": "^7.24.7", "@pact-foundation/pact": "^12.5.2", @@ -126,14 +126,14 @@ "@grafana/data": "^8.5.16", "@maji/react-prism": "^1.0.1", "@monaco-editor/react": "^4.6.0", - "@mui/icons-material": "^5.16.5", - "@mui/material": "^5.16.5", + "@mui/icons-material": "^5.16.6", + "@mui/material": "^5.16.6", "@storybook/addon-storysource": "^7.6.17", "@tanstack/react-query": "^4.36.1", "@tanstack/react-query-devtools": "^4.36.1", "accounting": "^0.4.1", "apexcharts": "^3.51.0", - "axios": "^1.7.2", + "axios": "^1.7.3", "brace": "^0.11.1", "classnames": "^2.5.1", "clipboard": "2.0.11", @@ -168,7 +168,7 @@ "react-refresh": "^0.14.2", "react-remarkable": "^1.1.3", "react-router": "^5.1", - "react-router-dom": "^6.25.1", + "react-router-dom": "^6.26.0", "react-select": "^2.4.3", "react-tooltip": "4.2.6", "react-vis": "^1.12.1", diff --git a/web/yarn.lock b/web/yarn.lock index e6471dc2b9..ec9d0e7a1a 100644 --- a/web/yarn.lock +++ b/web/yarn.lock @@ -57,10 +57,10 @@ "@babel/highlight" "^7.24.7" picocolors "^1.0.0" -"@babel/compat-data@^7.20.5", "@babel/compat-data@^7.22.6", "@babel/compat-data@^7.24.8", "@babel/compat-data@^7.25.0": - version "7.25.0" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.25.0.tgz#6b226a5da3a686db3c30519750e071dce292ad95" - integrity sha512-P4fwKI2mjEb3ZU5cnMJzvRsRKGBUcs8jvxIoRmr6ufAY9Xk2Bz7JubRTTivkw55c7WQJfTECeqYVa+HZ0FzREg== +"@babel/compat-data@^7.20.5", "@babel/compat-data@^7.22.6", "@babel/compat-data@^7.25.2": + version "7.25.2" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.25.2.tgz#e41928bd33475305c586f6acbbb7e3ade7a6f7f5" + integrity sha512-bYcppcpKBvX4znYaPEeFau03bp89ShqNMLs+rmdptMw+heSZh9+z84d2YG+K7cYLbWwzdjtDoW/uqZmPjulClQ== "@babel/core@7.12.9": version "7.12.9" @@ -84,47 +84,37 @@ semver "^5.4.1" source-map "^0.5.0" -"@babel/core@^7.1.0", "@babel/core@^7.11.6", "@babel/core@^7.12.10", "@babel/core@^7.12.3", "@babel/core@^7.23.2", "@babel/core@^7.23.9", "@babel/core@^7.24.9", "@babel/core@^7.7.5": - version "7.24.9" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.24.9.tgz#dc07c9d307162c97fa9484ea997ade65841c7c82" - integrity sha512-5e3FI4Q3M3Pbr21+5xJwCv6ZT6KmGkI0vw3Tozy5ODAQFTIWe37iT8Cr7Ice2Ntb+M3iSKCEWMB1MBgKrW3whg== +"@babel/core@^7.1.0", "@babel/core@^7.11.6", "@babel/core@^7.12.10", "@babel/core@^7.12.3", "@babel/core@^7.23.2", "@babel/core@^7.23.9", "@babel/core@^7.25.2", "@babel/core@^7.7.5": + version "7.25.2" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.25.2.tgz#ed8eec275118d7613e77a352894cd12ded8eba77" + integrity sha512-BBt3opiCOxUr9euZ5/ro/Xv8/V7yJ5bjYMqG/C1YAo8MIKAnumZalCN+msbci3Pigy4lIQfPUpfMM27HMGaYEA== dependencies: "@ampproject/remapping" "^2.2.0" "@babel/code-frame" "^7.24.7" - "@babel/generator" "^7.24.9" - "@babel/helper-compilation-targets" "^7.24.8" - "@babel/helper-module-transforms" "^7.24.9" - "@babel/helpers" "^7.24.8" - "@babel/parser" "^7.24.8" - "@babel/template" "^7.24.7" - "@babel/traverse" "^7.24.8" - "@babel/types" "^7.24.9" + "@babel/generator" "^7.25.0" + "@babel/helper-compilation-targets" "^7.25.2" + "@babel/helper-module-transforms" "^7.25.2" + "@babel/helpers" "^7.25.0" + "@babel/parser" "^7.25.0" + "@babel/template" "^7.25.0" + "@babel/traverse" "^7.25.2" + "@babel/types" "^7.25.2" convert-source-map "^2.0.0" debug "^4.1.0" gensync "^1.0.0-beta.2" json5 "^2.2.3" semver "^6.3.1" -"@babel/eslint-parser@^7.25.0": - version "7.25.0" - resolved "https://registry.yarnpkg.com/@babel/eslint-parser/-/eslint-parser-7.25.0.tgz#08ee4d119a86d73365580568626de0b59145af9e" - integrity sha512-mlcTKuQAjczDRwWLIxv+Q925jaMUO8Jl5dxmWJSSGVYfZ4rKMp8daQvVC3rM1G2v8V+/fO0yIVTSLS+2zcB8rg== +"@babel/eslint-parser@^7.25.1": + version "7.25.1" + resolved "https://registry.yarnpkg.com/@babel/eslint-parser/-/eslint-parser-7.25.1.tgz#469cee4bd18a88ff3edbdfbd227bd20e82aa9b82" + integrity sha512-Y956ghgTT4j7rKesabkh5WeqgSFZVFwaPR0IWFm7KFHFmmJ4afbG49SmfW4S+GyRPx0Dy5jxEWA5t0rpxfElWg== dependencies: "@nicolo-ribaudo/eslint-scope-5-internals" "5.1.1-v1" eslint-visitor-keys "^2.1.0" semver "^6.3.1" -"@babel/generator@^7.12.11", "@babel/generator@^7.12.5", "@babel/generator@^7.24.8", "@babel/generator@^7.24.9", "@babel/generator@^7.7.2": - version "7.24.10" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.24.10.tgz#a4ab681ec2a78bbb9ba22a3941195e28a81d8e76" - integrity sha512-o9HBZL1G2129luEUlG1hB4N/nlYNWHnpwlND9eOMclRqqu1YDy2sSYVCFUZwl8I1Gxh+QSRrP2vD7EpUmFVXxg== - dependencies: - "@babel/types" "^7.24.9" - "@jridgewell/gen-mapping" "^0.3.5" - "@jridgewell/trace-mapping" "^0.3.25" - jsesc "^2.5.1" - -"@babel/generator@^7.25.0": +"@babel/generator@^7.12.11", "@babel/generator@^7.12.5", "@babel/generator@^7.25.0", "@babel/generator@^7.7.2": version "7.25.0" resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.25.0.tgz#f858ddfa984350bc3d3b7f125073c9af6988f18e" integrity sha512-3LEEcj3PVW8pW2R1SR1M89g/qrYk/m/mB/tLqn7dn4sbBUQyTqnlod+II2U4dqiGtUmkcnAmkMDralTFZttRiw== @@ -156,12 +146,12 @@ "@babel/traverse" "^7.24.7" "@babel/types" "^7.24.7" -"@babel/helper-compilation-targets@^7.13.0", "@babel/helper-compilation-targets@^7.20.7", "@babel/helper-compilation-targets@^7.22.6", "@babel/helper-compilation-targets@^7.24.7", "@babel/helper-compilation-targets@^7.24.8": - version "7.24.8" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.24.8.tgz#b607c3161cd9d1744977d4f97139572fe778c271" - integrity sha512-oU+UoqCHdp+nWVDkpldqIQL/i/bvAv53tRqLG/s+cOXxe66zOYLU7ar/Xs3LdmBihrUMEUhwu6dMZwbNOYDwvw== +"@babel/helper-compilation-targets@^7.13.0", "@babel/helper-compilation-targets@^7.20.7", "@babel/helper-compilation-targets@^7.22.6", "@babel/helper-compilation-targets@^7.24.7", "@babel/helper-compilation-targets@^7.24.8", "@babel/helper-compilation-targets@^7.25.2": + version "7.25.2" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.2.tgz#e1d9410a90974a3a5a66e84ff55ef62e3c02d06c" + integrity sha512-U2U5LsSaZ7TAt3cfaymQ8WHh0pxvdHoEk6HVpaexxixjyEquMh0L0YNJNM6CTGKMXV1iksi0iZkGw4AcFkPaaw== dependencies: - "@babel/compat-data" "^7.24.8" + "@babel/compat-data" "^7.25.2" "@babel/helper-validator-option" "^7.24.8" browserslist "^4.23.1" lru-cache "^5.1.1" @@ -255,13 +245,6 @@ dependencies: "@babel/types" "^7.16.7" -"@babel/helper-hoist-variables@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.24.7.tgz#b4ede1cde2fd89436397f30dc9376ee06b0f25ee" - integrity sha512-MJJwhkoGy5c4ehfoRyrJ/owKeMl19U54h27YYftT0o2teQ3FJ3nQUf/I3LlJsX4l3qlw7WRXUmiyajvHXoTubQ== - dependencies: - "@babel/types" "^7.24.7" - "@babel/helper-member-expression-to-functions@^7.24.7": version "7.24.7" resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.24.7.tgz#67613d068615a70e4ed5101099affc7a41c5225f" @@ -307,26 +290,15 @@ "@babel/traverse" "^7.24.7" "@babel/types" "^7.24.7" -"@babel/helper-module-transforms@^7.12.1", "@babel/helper-module-transforms@^7.24.7", "@babel/helper-module-transforms@^7.24.8", "@babel/helper-module-transforms@^7.24.9": - version "7.24.9" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.24.9.tgz#e13d26306b89eea569180868e652e7f514de9d29" - integrity sha512-oYbh+rtFKj/HwBQkFlUzvcybzklmVdVV3UU+mN7n2t/q3yGHbuVdNxyFvSBO1tfvjyArpHNcWMAzsSPdyI46hw== - dependencies: - "@babel/helper-environment-visitor" "^7.24.7" - "@babel/helper-module-imports" "^7.24.7" - "@babel/helper-simple-access" "^7.24.7" - "@babel/helper-split-export-declaration" "^7.24.7" - "@babel/helper-validator-identifier" "^7.24.7" - -"@babel/helper-module-transforms@^7.25.0": - version "7.25.0" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.25.0.tgz#3ffc23c473a2769a7e40d3274495bd559fdd2ecc" - integrity sha512-bIkOa2ZJYn7FHnepzr5iX9Kmz8FjIz4UKzJ9zhX3dnYuVW0xul9RuR3skBfoLu+FPTQw90EHW9rJsSZhyLQ3fQ== +"@babel/helper-module-transforms@^7.12.1", "@babel/helper-module-transforms@^7.24.7", "@babel/helper-module-transforms@^7.24.8", "@babel/helper-module-transforms@^7.25.0", "@babel/helper-module-transforms@^7.25.2": + version "7.25.2" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.25.2.tgz#ee713c29768100f2776edf04d4eb23b8d27a66e6" + integrity sha512-BjyRAbix6j/wv83ftcVJmBt72QtHI56C7JXZoG2xATiLpmoC7dpd8WnkikExHDVPpi/3qCmO6WY1EaXOluiecQ== dependencies: "@babel/helper-module-imports" "^7.24.7" "@babel/helper-simple-access" "^7.24.7" "@babel/helper-validator-identifier" "^7.24.7" - "@babel/traverse" "^7.25.0" + "@babel/traverse" "^7.25.2" "@babel/helper-optimise-call-expression@^7.24.7": version "7.24.7" @@ -445,13 +417,13 @@ "@babel/traverse" "^7.25.0" "@babel/types" "^7.25.0" -"@babel/helpers@^7.12.5", "@babel/helpers@^7.24.8": - version "7.24.8" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.24.8.tgz#2820d64d5d6686cca8789dd15b074cd862795873" - integrity sha512-gV2265Nkcz7weJJfvDoAEVzC1e2OTDpkGbEsebse8koXUJUXPsCMi7sRo/+SPMuMZ9MtUPnGwITTnQnU5YjyaQ== +"@babel/helpers@^7.12.5", "@babel/helpers@^7.25.0": + version "7.25.0" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.25.0.tgz#e69beb7841cb93a6505531ede34f34e6a073650a" + integrity sha512-MjgLZ42aCm0oGjJj8CtSM3DB8NOOf8h2l7DCTePJs29u+v7yO/RBX9nShlKMgFnRks/Q4tBAe7Hxnov9VkGwLw== dependencies: - "@babel/template" "^7.24.7" - "@babel/types" "^7.24.8" + "@babel/template" "^7.25.0" + "@babel/types" "^7.25.0" "@babel/highlight@^7.24.7": version "7.24.7" @@ -463,23 +435,20 @@ js-tokens "^4.0.0" picocolors "^1.0.0" -"@babel/parser@^7.1.0", "@babel/parser@^7.12.11", "@babel/parser@^7.12.7", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.23.9", "@babel/parser@^7.24.7", "@babel/parser@^7.24.8": - version "7.24.8" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.24.8.tgz#58a4dbbcad7eb1d48930524a3fd93d93e9084c6f" - integrity sha512-WzfbgXOkGzZiXXCqk43kKwZjzwx4oulxZi3nq2TYL9mOjQv6kYwul9mz6ID36njuL7Xkp6nJEfok848Zj10j/w== - -"@babel/parser@^7.25.0": - version "7.25.0" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.25.0.tgz#9fdc9237504d797b6e7b8f66e78ea7f570d256ad" - integrity sha512-CzdIU9jdP0dg7HdyB+bHvDJGagUv+qtzZt5rYCWwW6tITNqV9odjp6Qu41gkG0ca5UfdDUWrKkiAnHHdGRnOrA== +"@babel/parser@^7.1.0", "@babel/parser@^7.12.11", "@babel/parser@^7.12.7", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.23.9", "@babel/parser@^7.25.0", "@babel/parser@^7.25.3": + version "7.25.3" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.25.3.tgz#91fb126768d944966263f0657ab222a642b82065" + integrity sha512-iLTJKDbJ4hMvFPgQwwsVoxtHyWpKKPBrxkANrSYewDPaPpT5py5yeVkgPIJ7XYXhndxJpaA3PyALSXQ7u8e/Dw== + dependencies: + "@babel/types" "^7.25.2" -"@babel/plugin-bugfix-firefox-class-in-computed-class-key@^7.25.0": - version "7.25.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.25.0.tgz#328275f22d809b962978d998c6eba22a233ac8aa" - integrity sha512-dG0aApncVQwAUJa8tP1VHTnmU67BeIQvKafd3raEx315H54FfkZSz3B/TT+33ZQAjatGJA79gZqTtqL5QZUKXw== +"@babel/plugin-bugfix-firefox-class-in-computed-class-key@^7.25.3": + version "7.25.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.25.3.tgz#dca427b45a6c0f5c095a1c639dfe2476a3daba7f" + integrity sha512-wUrcsxZg6rqBXG05HG1FPYgsP6EvwF4WpBbxIpWIIYnH8wG0gzx3yZY3dtEHas4sTAOGkbTsc9EGPxwff8lRoA== dependencies: "@babel/helper-plugin-utils" "^7.24.8" - "@babel/traverse" "^7.25.0" + "@babel/traverse" "^7.25.3" "@babel/plugin-bugfix-safari-class-field-initializer-scope@^7.25.0": version "7.25.0" @@ -927,14 +896,14 @@ "@babel/helper-plugin-utils" "^7.24.7" "@babel/helper-skip-transparent-expression-wrappers" "^7.24.7" -"@babel/plugin-transform-function-name@^7.25.0": - version "7.25.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.25.0.tgz#d17890029ceefb45189ea203b404a496263a8412" - integrity sha512-CQmfSnK14eYu82fu6GlCwRciHB7mp7oLN+DeyGDDwUr9cMwuSVviJKPXw/YcRYZdB1TdlLJWHHwXwnwD1WnCmQ== +"@babel/plugin-transform-function-name@^7.25.1": + version "7.25.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.25.1.tgz#b85e773097526c1a4fc4ba27322748643f26fc37" + integrity sha512-TVVJVdW9RKMNgJJlLtHsKDTydjZAbwIsn6ySBPQaEAUU5+gVvlJt/9nRmqVbsV/IBanRjzWoaAQKLoamWVOUuA== dependencies: "@babel/helper-compilation-targets" "^7.24.8" "@babel/helper-plugin-utils" "^7.24.8" - "@babel/traverse" "^7.25.0" + "@babel/traverse" "^7.25.1" "@babel/plugin-transform-json-strings@^7.24.7": version "7.24.7" @@ -944,12 +913,12 @@ "@babel/helper-plugin-utils" "^7.24.7" "@babel/plugin-syntax-json-strings" "^7.8.3" -"@babel/plugin-transform-literals@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.24.7.tgz#36b505c1e655151a9d7607799a9988fc5467d06c" - integrity sha512-vcwCbb4HDH+hWi8Pqenwnjy+UiklO4Kt1vfspcQYFhJdpthSnW8XvWGyDZWKNVrVbVViI/S7K9PDJZiUmP2fYQ== +"@babel/plugin-transform-literals@^7.25.2": + version "7.25.2" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.25.2.tgz#deb1ad14fc5490b9a65ed830e025bca849d8b5f3" + integrity sha512-HQI+HcTbm9ur3Z2DkO+jgESMAMcYLuN/A7NRw9juzxAezN9AvqvUTnpKP/9kkYANz6u7dFlAyOu44ejuGySlfw== dependencies: - "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.8" "@babel/plugin-transform-logical-assignment-operators@^7.24.7": version "7.24.7" @@ -1232,16 +1201,16 @@ core-js "^2.6.5" regenerator-runtime "^0.13.4" -"@babel/preset-env@^7.12.11", "@babel/preset-env@^7.25.0": - version "7.25.0" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.25.0.tgz#3fe92e470311e91478129efda101816c680f0479" - integrity sha512-vYAA8PrCOeZfG4D87hmw1KJ1BPubghXP1e2MacRFwECGNKL76dkA38JEwYllbvQCpf/kLxsTtir0b8MtxKoVCw== +"@babel/preset-env@^7.12.11", "@babel/preset-env@^7.25.3": + version "7.25.3" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.25.3.tgz#0bf4769d84ac51d1073ab4a86f00f30a3a83c67c" + integrity sha512-QsYW7UeAaXvLPX9tdVliMJE7MD7M6MLYVTovRTIwhoYQVFHR1rM4wO8wqAezYi3/BpSD+NzVCZ69R6smWiIi8g== dependencies: - "@babel/compat-data" "^7.25.0" - "@babel/helper-compilation-targets" "^7.24.8" + "@babel/compat-data" "^7.25.2" + "@babel/helper-compilation-targets" "^7.25.2" "@babel/helper-plugin-utils" "^7.24.8" "@babel/helper-validator-option" "^7.24.8" - "@babel/plugin-bugfix-firefox-class-in-computed-class-key" "^7.25.0" + "@babel/plugin-bugfix-firefox-class-in-computed-class-key" "^7.25.3" "@babel/plugin-bugfix-safari-class-field-initializer-scope" "^7.25.0" "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.25.0" "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.24.7" @@ -1282,9 +1251,9 @@ "@babel/plugin-transform-exponentiation-operator" "^7.24.7" "@babel/plugin-transform-export-namespace-from" "^7.24.7" "@babel/plugin-transform-for-of" "^7.24.7" - "@babel/plugin-transform-function-name" "^7.25.0" + "@babel/plugin-transform-function-name" "^7.25.1" "@babel/plugin-transform-json-strings" "^7.24.7" - "@babel/plugin-transform-literals" "^7.24.7" + "@babel/plugin-transform-literals" "^7.25.2" "@babel/plugin-transform-logical-assignment-operators" "^7.24.7" "@babel/plugin-transform-member-expression-literals" "^7.24.7" "@babel/plugin-transform-modules-amd" "^7.24.7" @@ -1385,16 +1354,7 @@ dependencies: regenerator-runtime "^0.14.0" -"@babel/template@^7.12.7", "@babel/template@^7.24.7", "@babel/template@^7.3.3": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.24.7.tgz#02efcee317d0609d2c07117cb70ef8fb17ab7315" - integrity sha512-jYqfPrU9JTF0PmPy1tLYHW4Mp4KlgxJD9l2nP9fD6yT/ICi554DmrWBAEYpIelzjHf1msDP3PxJIRt/nFNfBig== - dependencies: - "@babel/code-frame" "^7.24.7" - "@babel/parser" "^7.24.7" - "@babel/types" "^7.24.7" - -"@babel/template@^7.25.0": +"@babel/template@^7.12.7", "@babel/template@^7.24.7", "@babel/template@^7.25.0", "@babel/template@^7.3.3": version "7.25.0" resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.25.0.tgz#e733dc3134b4fede528c15bc95e89cb98c52592a" integrity sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q== @@ -1403,48 +1363,23 @@ "@babel/parser" "^7.25.0" "@babel/types" "^7.25.0" -"@babel/traverse@^7.1.6", "@babel/traverse@^7.12.11", "@babel/traverse@^7.12.9", "@babel/traverse@^7.13.0", "@babel/traverse@^7.24.7", "@babel/traverse@^7.24.8", "@babel/traverse@^7.4.5": - version "7.24.8" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.24.8.tgz#6c14ed5232b7549df3371d820fbd9abfcd7dfab7" - integrity sha512-t0P1xxAPzEDcEPmjprAQq19NWum4K0EQPjMwZQZbHt+GiZqvjCHjj755Weq1YRPVzBI+3zSfvScfpnuIecVFJQ== - dependencies: - "@babel/code-frame" "^7.24.7" - "@babel/generator" "^7.24.8" - "@babel/helper-environment-visitor" "^7.24.7" - "@babel/helper-function-name" "^7.24.7" - "@babel/helper-hoist-variables" "^7.24.7" - "@babel/helper-split-export-declaration" "^7.24.7" - "@babel/parser" "^7.24.8" - "@babel/types" "^7.24.8" - debug "^4.3.1" - globals "^11.1.0" - -"@babel/traverse@^7.25.0": - version "7.25.0" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.25.0.tgz#e8533c0a57ed97921d1e5b20dd3db63d3efaebf5" - integrity sha512-ubALThHQy4GCf6mbb+5ZRNmLLCI7bJ3f8Q6LHBSRlSKSWj5a7dSUzJBLv3VuIhFrFPgjF4IzPF567YG/HSCdZA== +"@babel/traverse@^7.1.6", "@babel/traverse@^7.12.11", "@babel/traverse@^7.12.9", "@babel/traverse@^7.13.0", "@babel/traverse@^7.24.7", "@babel/traverse@^7.24.8", "@babel/traverse@^7.25.0", "@babel/traverse@^7.25.1", "@babel/traverse@^7.25.2", "@babel/traverse@^7.25.3", "@babel/traverse@^7.4.5": + version "7.25.3" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.25.3.tgz#f1b901951c83eda2f3e29450ce92743783373490" + integrity sha512-HefgyP1x754oGCsKmV5reSmtV7IXj/kpaE1XYY+D9G5PvKKoFfSbiS4M77MdjuwlZKDIKFCffq9rPU+H/s3ZdQ== dependencies: "@babel/code-frame" "^7.24.7" "@babel/generator" "^7.25.0" - "@babel/parser" "^7.25.0" + "@babel/parser" "^7.25.3" "@babel/template" "^7.25.0" - "@babel/types" "^7.25.0" + "@babel/types" "^7.25.2" debug "^4.3.1" globals "^11.1.0" -"@babel/types@^7.0.0", "@babel/types@^7.12.11", "@babel/types@^7.12.7", "@babel/types@^7.16.7", "@babel/types@^7.18.6", "@babel/types@^7.2.0", "@babel/types@^7.20.7", "@babel/types@^7.22.15", "@babel/types@^7.22.5", "@babel/types@^7.24.7", "@babel/types@^7.24.8", "@babel/types@^7.24.9", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4": - version "7.24.9" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.24.9.tgz#228ce953d7b0d16646e755acf204f4cf3d08cc73" - integrity sha512-xm8XrMKz0IlUdocVbYJe0Z9xEgidU7msskG8BbhnTPK/HZ2z/7FP7ykqPgrUH+C+r414mNfNWam1f2vqOjqjYQ== - dependencies: - "@babel/helper-string-parser" "^7.24.8" - "@babel/helper-validator-identifier" "^7.24.7" - to-fast-properties "^2.0.0" - -"@babel/types@^7.25.0": - version "7.25.0" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.25.0.tgz#e6e3656c581f28da8452ed4f69e38008ec0ba41b" - integrity sha512-LcnxQSsd9aXOIgmmSpvZ/1yo46ra2ESYyqLcryaBZOghxy5qqOBjvCWP5JfkI8yl9rlxRgdLTTMCQQRcN2hdCg== +"@babel/types@^7.0.0", "@babel/types@^7.12.11", "@babel/types@^7.12.7", "@babel/types@^7.16.7", "@babel/types@^7.18.6", "@babel/types@^7.2.0", "@babel/types@^7.20.7", "@babel/types@^7.22.15", "@babel/types@^7.22.5", "@babel/types@^7.24.7", "@babel/types@^7.24.8", "@babel/types@^7.25.0", "@babel/types@^7.25.2", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4": + version "7.25.2" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.25.2.tgz#55fb231f7dc958cd69ea141a4c2997e819646125" + integrity sha512-YTnYtra7W9e6/oAZEHj0bJehPRUlLH9/fbpT5LfB0NhQXyALCRkRs3zH9v07IYhkgpqX6Z78FnuccZr/l4Fs4Q== dependencies: "@babel/helper-string-parser" "^7.24.8" "@babel/helper-validator-identifier" "^7.24.7" @@ -2274,28 +2209,28 @@ call-me-maybe "^1.0.1" glob-to-regexp "^0.3.0" -"@mui/core-downloads-tracker@^5.16.5": - version "5.16.5" - resolved "https://registry.yarnpkg.com/@mui/core-downloads-tracker/-/core-downloads-tracker-5.16.5.tgz#396c7e133a0705c8d04c8ef36edad7ad94cb4981" - integrity sha512-ziFn1oPm6VjvHQcdGcAO+fXvOQEgieIj0BuSqcltFU+JXIxjPdVYNTdn2HU7/Ak5Gabk6k2u7+9PV7oZ6JT5sA== +"@mui/core-downloads-tracker@^5.16.6": + version "5.16.6" + resolved "https://registry.yarnpkg.com/@mui/core-downloads-tracker/-/core-downloads-tracker-5.16.6.tgz#f029e12ffda8eb79838cc85897f03a628010037c" + integrity sha512-kytg6LheUG42V8H/o/Ptz3olSO5kUXW9zF0ox18VnblX6bO2yif1FPItgc3ey1t5ansb1+gbe7SatntqusQupg== -"@mui/icons-material@^5.16.5": - version "5.16.5" - resolved "https://registry.yarnpkg.com/@mui/icons-material/-/icons-material-5.16.5.tgz#53cdd03132315c8daff2200d146035f34c913470" - integrity sha512-bn88xxU/J9UV0s6+eutq7o3TTOrOlbCX+KshFb8kxgIxJZZfYz3JbAXVMivvoMF4Md6jCVUzM9HEkf4Ajab4tw== +"@mui/icons-material@^5.16.6": + version "5.16.6" + resolved "https://registry.yarnpkg.com/@mui/icons-material/-/icons-material-5.16.6.tgz#7067ddba693bec22f77592cb9cd516e2f1c1fd6e" + integrity sha512-ceNGjoXheH9wbIFa1JHmSc9QVjJUvh18KvHrR4/FkJCSi9HXJ+9ee1kUhCOEFfuxNF8UB6WWVrIUOUgRd70t0A== dependencies: "@babel/runtime" "^7.23.9" -"@mui/material@^5.16.5": - version "5.16.5" - resolved "https://registry.yarnpkg.com/@mui/material/-/material-5.16.5.tgz#7989b088073f88c2d19501cc947899d811556089" - integrity sha512-eQrjjg4JeczXvh/+8yvJkxWIiKNHVptB/AqpsKfZBWp5mUD5U3VsjODMuUl1K2BSq0omV3CiO/mQmWSSMKSmaA== +"@mui/material@^5.16.6": + version "5.16.6" + resolved "https://registry.yarnpkg.com/@mui/material/-/material-5.16.6.tgz#c7d695f4a9a473052dc086e64471d0435b7e4a52" + integrity sha512-0LUIKBOIjiFfzzFNxXZBRAyr9UQfmTAFzbt6ziOU2FDXhorNN2o3N9/32mNJbCA8zJo2FqFU6d3dtoqUDyIEfA== dependencies: "@babel/runtime" "^7.23.9" - "@mui/core-downloads-tracker" "^5.16.5" - "@mui/system" "^5.16.5" + "@mui/core-downloads-tracker" "^5.16.6" + "@mui/system" "^5.16.6" "@mui/types" "^7.2.15" - "@mui/utils" "^5.16.5" + "@mui/utils" "^5.16.6" "@popperjs/core" "^2.11.8" "@types/react-transition-group" "^4.4.10" clsx "^2.1.0" @@ -2304,35 +2239,35 @@ react-is "^18.3.1" react-transition-group "^4.4.5" -"@mui/private-theming@^5.16.5": - version "5.16.5" - resolved "https://registry.yarnpkg.com/@mui/private-theming/-/private-theming-5.16.5.tgz#b90afcfa76ea50778453c633656ff59cb1b5494d" - integrity sha512-CSLg0YkpDqg0aXOxtjo3oTMd3XWMxvNb5d0v4AYVqwOltU8q6GvnZjhWyCLjGSCrcgfwm6/VDjaKLPlR14wxIA== +"@mui/private-theming@^5.16.6": + version "5.16.6" + resolved "https://registry.yarnpkg.com/@mui/private-theming/-/private-theming-5.16.6.tgz#547671e7ae3f86b68d1289a0b90af04dfcc1c8c9" + integrity sha512-rAk+Rh8Clg7Cd7shZhyt2HGTTE5wYKNSJ5sspf28Fqm/PZ69Er9o6KX25g03/FG2dfpg5GCwZh/xOojiTfm3hw== dependencies: "@babel/runtime" "^7.23.9" - "@mui/utils" "^5.16.5" + "@mui/utils" "^5.16.6" prop-types "^15.8.1" -"@mui/styled-engine@^5.16.4": - version "5.16.4" - resolved "https://registry.yarnpkg.com/@mui/styled-engine/-/styled-engine-5.16.4.tgz#a7a8c9079c307bab91ccd65ed5dd1496ddf2a3ab" - integrity sha512-0+mnkf+UiAmTVB8PZFqOhqf729Yh0Cxq29/5cA3VAyDVTRIUUQ8FXQhiAhUIbijFmM72rY80ahFPXIm4WDbzcA== +"@mui/styled-engine@^5.16.6": + version "5.16.6" + resolved "https://registry.yarnpkg.com/@mui/styled-engine/-/styled-engine-5.16.6.tgz#60110c106dd482dfdb7e2aa94fd6490a0a3f8852" + integrity sha512-zaThmS67ZmtHSWToTiHslbI8jwrmITcN93LQaR2lKArbvS7Z3iLkwRoiikNWutx9MBs8Q6okKvbZq1RQYB3v7g== dependencies: "@babel/runtime" "^7.23.9" "@emotion/cache" "^11.11.0" csstype "^3.1.3" prop-types "^15.8.1" -"@mui/system@^5.16.5": - version "5.16.5" - resolved "https://registry.yarnpkg.com/@mui/system/-/system-5.16.5.tgz#a90239e1467f7fce960167939dde9f44f6869484" - integrity sha512-uzIUGdrWddUx1HPxW4+B2o4vpgKyRxGe/8BxbfXVDPNPHX75c782TseoCnR/VyfnZJfqX87GcxDmnZEE1c031g== +"@mui/system@^5.16.6": + version "5.16.6" + resolved "https://registry.yarnpkg.com/@mui/system/-/system-5.16.6.tgz#2dabe63d2e45816ce611c40d6e3f79b9c2ccbcd7" + integrity sha512-5xgyJjBIMPw8HIaZpfbGAaFYPwImQn7Nyh+wwKWhvkoIeDosQ1ZMVrbTclefi7G8hNmqhip04duYwYpbBFnBgw== dependencies: "@babel/runtime" "^7.23.9" - "@mui/private-theming" "^5.16.5" - "@mui/styled-engine" "^5.16.4" + "@mui/private-theming" "^5.16.6" + "@mui/styled-engine" "^5.16.6" "@mui/types" "^7.2.15" - "@mui/utils" "^5.16.5" + "@mui/utils" "^5.16.6" clsx "^2.1.0" csstype "^3.1.3" prop-types "^15.8.1" @@ -2342,10 +2277,10 @@ resolved "https://registry.yarnpkg.com/@mui/types/-/types-7.2.15.tgz#dadd232fe9a70be0d526630675dff3b110f30b53" integrity sha512-nbo7yPhtKJkdf9kcVOF8JZHPZTmqXjJ/tI0bdWgHg5tp9AnIN4Y7f7wm9T+0SyGYJk76+GYZ8Q5XaTYAsUHN0Q== -"@mui/utils@^5.16.5": - version "5.16.5" - resolved "https://registry.yarnpkg.com/@mui/utils/-/utils-5.16.5.tgz#3a16877a80166a7f8b58c893d08e0993040fc49e" - integrity sha512-CwhcA9y44XwK7k2joL3Y29mRUnoBt+gOZZdGyw7YihbEwEErJYBtDwbZwVgH68zAljGe/b+Kd5bzfl63Gi3R2A== +"@mui/utils@^5.16.6": + version "5.16.6" + resolved "https://registry.yarnpkg.com/@mui/utils/-/utils-5.16.6.tgz#905875bbc58d3dcc24531c3314a6807aba22a711" + integrity sha512-tWiQqlhxAt3KENNiSRL+DIn9H5xNVK6Jjf70x3PnfQPz1MPBdh7yyIcAyVBT9xiw7hP3SomRhPR7hzBMBCjqEA== dependencies: "@babel/runtime" "^7.23.9" "@mui/types" "^7.2.15" @@ -2509,10 +2444,10 @@ resolved "https://registry.yarnpkg.com/@popperjs/core/-/core-2.11.8.tgz#6b79032e760a0899cd4204710beede972a3a185f" integrity sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A== -"@remix-run/router@1.18.0": - version "1.18.0" - resolved "https://registry.yarnpkg.com/@remix-run/router/-/router-1.18.0.tgz#20b033d1f542a100c1d57cfd18ecf442d1784732" - integrity sha512-L3jkqmqoSVBVKHfpGZmLrex0lxR5SucGA0sUfFzGctehw+S/ggL9L/0NnC5mw6P8HUWpFZ3nQw3cRApjjWx9Sw== +"@remix-run/router@1.19.0": + version "1.19.0" + resolved "https://registry.yarnpkg.com/@remix-run/router/-/router-1.19.0.tgz#745dbffbce67f05386d57ca22c51dfd85c979593" + integrity sha512-zDICCLKEwbVYTS6TjYaWtHXxkdoUvD/QXvyVZjGCsWz5vyH7aFeONlPffPdW+Y/t6KT0MgXb2Mfjun9YpWN1dA== "@sinclair/typebox@^0.27.8": version "0.27.8" @@ -5510,10 +5445,10 @@ axe-core@^4.9.1: resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.9.1.tgz#fcd0f4496dad09e0c899b44f6c4bb7848da912ae" integrity sha512-QbUdXJVTpvUTHU7871ppZkdOLBeGUKBQWHkHrvN2V9IQWGMt61zf3B45BtzjxEJzYuj0JBjBZP/hmYS/R9pmAw== -axios@^1.6.1, axios@^1.7.2: - version "1.7.2" - resolved "https://registry.yarnpkg.com/axios/-/axios-1.7.2.tgz#b625db8a7051fbea61c35a3cbb3a1daa7b9c7621" - integrity sha512-2A8QhOMrbomlDuiLeK9XibIBzuHeRcqqNOHp0Cyp5EoJ1IFDh+XZH3A6BkXtv0K4gFGCI0Y4BM7B1wOEi0Rmgw== +axios@^1.6.1, axios@^1.7.3: + version "1.7.3" + resolved "https://registry.yarnpkg.com/axios/-/axios-1.7.3.tgz#a1125f2faf702bc8e8f2104ec3a76fab40257d85" + integrity sha512-Ar7ND9pU99eJ9GpoGQKhKf58GpUOgnzuaB7ueNQ5BMi0p+LZ5oaEnfF999fAArcTIBwXTCHAmGcHOZJaWPq9Nw== dependencies: follow-redirects "^1.15.6" form-data "^4.0.0" @@ -14582,20 +14517,20 @@ react-remarkable@^1.1.3: dependencies: remarkable "^1.x" -react-router-dom@^6.25.1: - version "6.25.1" - resolved "https://registry.yarnpkg.com/react-router-dom/-/react-router-dom-6.25.1.tgz#b89f8d63fc8383ea4e89c44bf31c5843e1f7afa0" - integrity sha512-0tUDpbFvk35iv+N89dWNrJp+afLgd+y4VtorJZuOCXK0kkCWjEvb3vTJM++SYvMEpbVwXKf3FjeVveVEb6JpDQ== +react-router-dom@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/react-router-dom/-/react-router-dom-6.26.0.tgz#8debe13295c58605c04f93018d659a763245e58c" + integrity sha512-RRGUIiDtLrkX3uYcFiCIxKFWMcWQGMojpYZfcstc63A1+sSnVgILGIm9gNUA6na3Fm1QuPGSBQH2EMbAZOnMsQ== dependencies: - "@remix-run/router" "1.18.0" - react-router "6.25.1" + "@remix-run/router" "1.19.0" + react-router "6.26.0" -react-router@6.25.1: - version "6.25.1" - resolved "https://registry.yarnpkg.com/react-router/-/react-router-6.25.1.tgz#70b4f1af79954cfcfd23f6ddf5c883e8c904203e" - integrity sha512-u8ELFr5Z6g02nUtpPAggP73Jigj1mRePSwhS/2nkTrlPU5yEkH1vYzWNyvSnSzeeE2DNqWdH+P8OhIh9wuXhTw== +react-router@6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/react-router/-/react-router-6.26.0.tgz#d5af4c46835b202348ef2b7ddacd32a2db539fde" + integrity sha512-wVQq0/iFYd3iZ9H2l3N3k4PL8EEHcb0XlU2Na8nEwmiXgIUElEH6gaJDtUQxJ+JFzmIXaQjfdpcGWaM6IoQGxg== dependencies: - "@remix-run/router" "1.18.0" + "@remix-run/router" "1.19.0" react-router@^5.1: version "5.3.4" From 495d5ad92d308c26b3f52e754580af1b9c585832 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 3 Aug 2024 12:08:52 +0000 Subject: [PATCH 028/123] Bump @storybook/addon-links from 7.6.17 to 8.1.11 in /web (#4802) Bumps [@storybook/addon-links](https://github.com/storybookjs/storybook/tree/HEAD/code/addons/links) from 7.6.17 to 8.1.11. - [Release notes](https://github.com/storybookjs/storybook/releases) - [Changelog](https://github.com/storybookjs/storybook/blob/next/CHANGELOG.md) - [Commits](https://github.com/storybookjs/storybook/commits/v8.1.11/code/addons/links) --- updated-dependencies: - dependency-name: "@storybook/addon-links" dependency-type: direct:development update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- web/package.json | 2 +- web/yarn.lock | 18 +++++++++--------- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/web/package.json b/web/package.json index e375b40b9b..c5524ddf19 100644 --- a/web/package.json +++ b/web/package.json @@ -39,7 +39,7 @@ "@storybook/addon-actions": "^7.6.17", "@storybook/addon-essentials": "^6.5.16", "@storybook/addon-interactions": "^7.6.17", - "@storybook/addon-links": "^7.6.17", + "@storybook/addon-links": "^8.1.11", "@storybook/builder-webpack5": "^7.6.17", "@storybook/manager-webpack5": "^6.5.16", "@storybook/preset-scss": "^1.0.3", diff --git a/web/yarn.lock b/web/yarn.lock index ec9d0e7a1a..5b07929776 100644 --- a/web/yarn.lock +++ b/web/yarn.lock @@ -2615,12 +2615,12 @@ polished "^4.2.2" ts-dedent "^2.2.0" -"@storybook/addon-links@^7.6.17": - version "7.6.17" - resolved "https://registry.yarnpkg.com/@storybook/addon-links/-/addon-links-7.6.17.tgz#5a678ff09c1b5056b67cb345c115cfcd343ffe86" - integrity sha512-iFUwKObRn0EKI0zMETsil2p9a/81rCuSMEWECsi+khkCAs1FUnD2cT6Ag5ydcNcBXsdtdfDJdtXQrkw+TSoStQ== +"@storybook/addon-links@^8.1.11": + version "8.1.11" + resolved "https://registry.yarnpkg.com/@storybook/addon-links/-/addon-links-8.1.11.tgz#3e15ac7fe1b7d298b7200f36b772baf6449a64c2" + integrity sha512-HlV2RQSrZyi+55W1B1a9eWNuJdNpWx0g3j7s2arNlNmbd6/kfWAp84axBstI1tL0nW4svut7bWlCsMSOIden+A== dependencies: - "@storybook/csf" "^0.1.2" + "@storybook/csf" "^0.1.7" "@storybook/global" "^5.0.0" ts-dedent "^2.0.0" @@ -3152,10 +3152,10 @@ dependencies: lodash "^4.17.15" -"@storybook/csf@^0.1.2": - version "0.1.2" - resolved "https://registry.yarnpkg.com/@storybook/csf/-/csf-0.1.2.tgz#8e7452f0097507f5841b5ade3f5da1525bc9afb2" - integrity sha512-ePrvE/pS1vsKR9Xr+o+YwdqNgHUyXvg+1Xjx0h9LrVx7Zq4zNe06pd63F5EvzTbCbJsHj7GHr9tkiaqm7U8WRA== +"@storybook/csf@^0.1.2", "@storybook/csf@^0.1.7": + version "0.1.11" + resolved "https://registry.yarnpkg.com/@storybook/csf/-/csf-0.1.11.tgz#ad685a4fe564a47a6b73571c2e7c07b526f4f71b" + integrity sha512-dHYFQH3mA+EtnCkHXzicbLgsvzYjcDJ1JWsogbItZogkPHgSJM/Wr71uMkcvw8v9mmCyP4NpXJuu6bPoVsOnzg== dependencies: type-fest "^2.19.0" From c520b61808923c78082c9a60ca5e0c9d55de3c93 Mon Sep 17 00:00:00 2001 From: replicated-ci-kots <91219917+replicated-ci-kots@users.noreply.github.com> Date: Sun, 4 Aug 2024 12:08:23 +0000 Subject: [PATCH 029/123] Update KOTS image dependency tags (#4805) Co-authored-by: dydx <25685+dydx@users.noreply.github.com> --- .image.env | 2 +- Makefile | 2 +- pkg/image/constants.go | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.image.env b/.image.env index cd1511d45c..5a5d41f55f 100644 --- a/.image.env +++ b/.image.env @@ -1,7 +1,7 @@ # Generated file, do not modify. This file is generated from a text file containing a list of images. The # most recent tag is interpolated from the source repository and used to generate a fully qualified image # name. -MINIO_TAG='0.20240731.054626-r0' +MINIO_TAG='0.20240803.043323-r0' RQLITE_TAG='8.26.8-r0' DEX_TAG='2.40.0-r3' SCHEMAHERO_TAG='0.17.9' diff --git a/Makefile b/Makefile index 1cd85f360f..db351f3d11 100644 --- a/Makefile +++ b/Makefile @@ -1,6 +1,6 @@ include Makefile.build.mk CURRENT_USER := $(if $(GITHUB_USER),$(GITHUB_USER),$(shell id -u -n)) -MINIO_TAG ?= 0.20240731.054626-r0 +MINIO_TAG ?= 0.20240803.043323-r0 RQLITE_TAG ?= 8.26.8-r0 DEX_TAG ?= 2.40.0-r3 LVP_TAG ?= v0.6.7 diff --git a/pkg/image/constants.go b/pkg/image/constants.go index ae2b6359e7..cb2f79dec2 100644 --- a/pkg/image/constants.go +++ b/pkg/image/constants.go @@ -5,7 +5,7 @@ package image // image name. const ( - Minio = "kotsadm/minio:0.20240731.054626-r0" + Minio = "kotsadm/minio:0.20240803.043323-r0" Rqlite = "kotsadm/rqlite:8.26.8-r0" Dex = "kotsadm/dex:2.40.0-r3" Schemahero = "schemahero/schemahero:0.17.9" From 34dd7ae033ddc18f385054294faf93adf6583809 Mon Sep 17 00:00:00 2001 From: replicated-ci-kots <91219917+replicated-ci-kots@users.noreply.github.com> Date: Mon, 5 Aug 2024 12:09:45 +0000 Subject: [PATCH 030/123] Update KOTS image dependency tags (#4806) Co-authored-by: dydx <25685+dydx@users.noreply.github.com> --- .image.env | 2 +- Makefile | 2 +- pkg/image/constants.go | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.image.env b/.image.env index 5a5d41f55f..58334c1f18 100644 --- a/.image.env +++ b/.image.env @@ -3,6 +3,6 @@ # name. MINIO_TAG='0.20240803.043323-r0' RQLITE_TAG='8.26.8-r0' -DEX_TAG='2.40.0-r3' +DEX_TAG='2.41.0-r0' SCHEMAHERO_TAG='0.17.9' LVP_TAG='v0.6.7' \ No newline at end of file diff --git a/Makefile b/Makefile index db351f3d11..82be2c9183 100644 --- a/Makefile +++ b/Makefile @@ -2,7 +2,7 @@ include Makefile.build.mk CURRENT_USER := $(if $(GITHUB_USER),$(GITHUB_USER),$(shell id -u -n)) MINIO_TAG ?= 0.20240803.043323-r0 RQLITE_TAG ?= 8.26.8-r0 -DEX_TAG ?= 2.40.0-r3 +DEX_TAG ?= 2.41.0-r0 LVP_TAG ?= v0.6.7 define sendMetrics diff --git a/pkg/image/constants.go b/pkg/image/constants.go index cb2f79dec2..0777591acb 100644 --- a/pkg/image/constants.go +++ b/pkg/image/constants.go @@ -7,7 +7,7 @@ package image const ( Minio = "kotsadm/minio:0.20240803.043323-r0" Rqlite = "kotsadm/rqlite:8.26.8-r0" - Dex = "kotsadm/dex:2.40.0-r3" + Dex = "kotsadm/dex:2.41.0-r0" Schemahero = "schemahero/schemahero:0.17.9" Lvp = "replicated/local-volume-provider:v0.6.7" ) From 0785f4c04e7220119003b9af7cae9496954a0de7 Mon Sep 17 00:00:00 2001 From: Florian Hines Date: Tue, 6 Aug 2024 12:57:28 -0500 Subject: [PATCH 031/123] docs: update e2e readme with pw instructions (#4807) * update e2e readme * Less verbose * Update e2e/README.md --------- Co-authored-by: Salah Al Saleh --- e2e/README.md | 70 ++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 66 insertions(+), 4 deletions(-) diff --git a/e2e/README.md b/e2e/README.md index 9a29ccff33..898d37533a 100644 --- a/e2e/README.md +++ b/e2e/README.md @@ -2,11 +2,73 @@ E2E tests are run in build-test workflow on pull_request event. -e2e_test.go uses Ginkgo to build a test suite from inventory.go and runs each test using testim/client.go. +e2e_test.go uses Ginkgo to build a test suite from inventory.go and runs each test using testim/client.go or playwright/playwright.go -Tests are parallelized using Gingko's test focus. Each workflow definition in .github/workflows/build-test.yaml must define a `test-focus` parameter that matches the `Test Name` property defined in inventory.go. Each e2e test workflow skips all tests but what is defined in `test-focus`. +Tests are parallelized using Gingko's test focus. Each workflow definition in .github/workflows/build-test.yaml must define a `test-focus` parameter that matches the `Test Name` property defined in inventory.go. Each e2e test workflow skips all tests but what is defined in `test-focus`. Please colocate new playwright tests under the playwright comment with the other pw tests. -## Development environment +New tests should be written with playwright. + +## Playwright + +Playwright is the preferred testing framework for new tests moving forward. See playwright's [documentation](https://playwright.dev/docs/intro) for more information. + +### Development environment + +To install dependencies run: + +```bash +cd e2e/playwright +npm ci +npx playwright install --with-deps +``` + +Install the playwright extension in vscode if you've not already done so: + +```bash +code --install-extension ms-playwright.playwright +``` + +### Adding a new test + +To add a new test that you've already added in the [kots-tests-app repo](https://github.com/replicatedhq/kots-test-apps) - do the following: + +- Update `.github/workflows/build-test.yaml` to include the new test. You can copy an existing pw entry like `validate-change-channel` and update the test-focus, kots-namespace, and any other parameters needed for the test. +- Add the test to `e2e/inventory.go` , making sure the naming matches your kots-test-app and conforms to the naming convention of the other tests in the file: + +```go +func NewChangeChannel() Test { + return Test{ + ID: "change-channel", + Name: "Change Channel", + Namespace: "change-channel", + AppSlug: "change-channel", + UpstreamURI: "change-channel/automated", + } +} +``` + +- Add a new inventory test entry to `e2e/e2e_test.go` to ensure it actually runs: + +```go +Entry(nil, inventory.NewChangeChannel()), +``` + +- Create a new test directory in `e2e/playwright/tests` matching your test ID, with the corresponding test file: + +``` +$ tree e2e/playwright/tests/change-channel +e2e/playwright/tests/change-channel +├── license.yaml // a test specific license if needed +└── test.spec.ts // the actual test file +``` + +- See `e2e/playwright/tests/shared` for test utility functions that can be used in your test for things like logging in or uploading a license. + +## testim + +Testim is our legacy testing framework. It is being phased out in favor of playwright. + +### Development environment To install dependencies run: @@ -79,7 +141,7 @@ $ kubectl -n smoke-test port-forward svc/kotsadm 3000 --address=0.0.0.0 Forwarding from 0.0.0.0:3000 -> 3000 ``` -### Requirements +#### Requirements *Currently, the admin console helm chart will not install on an M1 Macbook because of it's [node affinity](https://github.com/replicatedhq/kots-helm/blob/main/templates/kotsadm-deployment.yaml#L32-L35) rules* From 8174de5a0490908a689cb890581398bcab644835 Mon Sep 17 00:00:00 2001 From: Mia Wong Date: Wed, 7 Aug 2024 12:40:46 -0400 Subject: [PATCH 032/123] Embedded Cluster: Improve UX for license installation process (#4799) --- web/src/Root.tsx | 2 ++ web/src/components/UploadLicenseFile.tsx | 5 ++++- web/src/components/apps/AppDetailPage.tsx | 4 +++- web/src/components/apps/AppLoading.tsx | 27 +++++++++++++++++++++++ 4 files changed, 36 insertions(+), 2 deletions(-) create mode 100644 web/src/components/apps/AppLoading.tsx diff --git a/web/src/Root.tsx b/web/src/Root.tsx index c5cc2d583c..a8c718f4a3 100644 --- a/web/src/Root.tsx +++ b/web/src/Root.tsx @@ -55,6 +55,7 @@ import AppSnapshots from "@components/snapshots/AppSnapshots"; import AppSnapshotRestore from "@components/snapshots/AppSnapshotRestore"; import EmbeddedClusterViewNode from "@components/apps/EmbeddedClusterViewNode"; import UpgradeStatusModal from "@components/modals/UpgradeStatusModal"; +import AppLoading from "@components/apps/AppLoading"; // react-query client const queryClient = new QueryClient(); @@ -573,6 +574,7 @@ const Root = () => { /> } /> + } /> } /> { if (appsListLength > 0 && isEmbeddedCluster) { navigate(`/app/${appSlugFromMetadata}`, { replace: true }); } - }, [props.appsListLength]); + if (appsListLength === 0 && isEmbeddedCluster) { + navigate(`/cluster/loading`, { replace: true }); + } + }, [props.appsListLength, props.isEmbeddedCluster]); const exchangeRliFileForLicense = async (content: string) => { return new Promise((resolve, reject) => { diff --git a/web/src/components/apps/AppDetailPage.tsx b/web/src/components/apps/AppDetailPage.tsx index f9e5212a1e..837792a350 100644 --- a/web/src/components/apps/AppDetailPage.tsx +++ b/web/src/components/apps/AppDetailPage.tsx @@ -99,8 +99,10 @@ function AppDetailPage(props: Props) { // navigate to first app if available if (appsList && appsList?.length > 0) { navigate(`/app/${appsList[0].slug}`, { replace: true }); - } else if (Utilities.isLoggedIn()) { + } else if (Utilities.isLoggedIn() && !props.isEmbeddedCluster) { navigate("/upload-license", { replace: true }); + } else if (Utilities.isLoggedIn() && props.isEmbeddedCluster) { + navigate("/cluster/loading", { replace: true }); } else { navigate("/secure-console", { replace: true }); } diff --git a/web/src/components/apps/AppLoading.tsx b/web/src/components/apps/AppLoading.tsx new file mode 100644 index 0000000000..fcd1096814 --- /dev/null +++ b/web/src/components/apps/AppLoading.tsx @@ -0,0 +1,27 @@ +import { useApps } from "@features/App"; +import { useEffect } from "react"; +import { useNavigate } from "react-router-dom"; + +const AppLoading = () => { + const navigate = useNavigate(); + + const { data: appsData } = useApps({ refetchInterval: 3000 }); + + const { apps: appsList } = appsData || {}; + + useEffect(() => { + // if no apps are present, return + if (appsList?.length === 0) { + return; + } else { + navigate("/"); + } + }, [appsData]); + return ( +
+

Waiting for license to install...

+
+ ); +}; + +export default AppLoading; From 035cfea373f3baa65baa43b63f27e1b2e2b83ef9 Mon Sep 17 00:00:00 2001 From: Diamon Wiggins <38189728+diamonwiggins@users.noreply.github.com> Date: Wed, 7 Aug 2024 16:34:43 -0400 Subject: [PATCH 033/123] add uri field for the default spec (#4808) --- pkg/supportbundle/staticspecs/defaultspec.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/pkg/supportbundle/staticspecs/defaultspec.yaml b/pkg/supportbundle/staticspecs/defaultspec.yaml index baba0c20a8..db10366ed8 100644 --- a/pkg/supportbundle/staticspecs/defaultspec.yaml +++ b/pkg/supportbundle/staticspecs/defaultspec.yaml @@ -3,6 +3,7 @@ kind: SupportBundle metadata: name: default-supportbundle spec: + uri: "https://raw.githubusercontent.com/replicatedhq/kots/main/pkg/supportbundle/staticspecs/defaultspec.yaml" collectors: - clusterInfo: {} - clusterResources: {} From 8d5a8170d7ddfc4629cd8c9a56963adb9618334a Mon Sep 17 00:00:00 2001 From: replicated-ci-kots <91219917+replicated-ci-kots@users.noreply.github.com> Date: Thu, 8 Aug 2024 00:16:06 +0000 Subject: [PATCH 034/123] Update KOTS image dependency tags (#4809) --- .image.env | 6 +++--- Makefile | 4 ++-- migrations/Makefile | 2 +- pkg/image/constants.go | 6 +++--- 4 files changed, 9 insertions(+), 9 deletions(-) diff --git a/.image.env b/.image.env index 58334c1f18..2eb7218dcb 100644 --- a/.image.env +++ b/.image.env @@ -1,8 +1,8 @@ # Generated file, do not modify. This file is generated from a text file containing a list of images. The # most recent tag is interpolated from the source repository and used to generate a fully qualified image # name. -MINIO_TAG='0.20240803.043323-r0' +MINIO_TAG='0.20240803.043323-r1' RQLITE_TAG='8.26.8-r0' -DEX_TAG='2.41.0-r0' -SCHEMAHERO_TAG='0.17.9' +DEX_TAG='2.41.1-r0' +SCHEMAHERO_TAG='0.17.10' LVP_TAG='v0.6.7' \ No newline at end of file diff --git a/Makefile b/Makefile index 82be2c9183..2280ac47c3 100644 --- a/Makefile +++ b/Makefile @@ -1,8 +1,8 @@ include Makefile.build.mk CURRENT_USER := $(if $(GITHUB_USER),$(GITHUB_USER),$(shell id -u -n)) -MINIO_TAG ?= 0.20240803.043323-r0 +MINIO_TAG ?= 0.20240803.043323-r1 RQLITE_TAG ?= 8.26.8-r0 -DEX_TAG ?= 2.41.0-r0 +DEX_TAG ?= 2.41.1-r0 LVP_TAG ?= v0.6.7 define sendMetrics diff --git a/migrations/Makefile b/migrations/Makefile index c242899b0c..0011e1951c 100644 --- a/migrations/Makefile +++ b/migrations/Makefile @@ -1,5 +1,5 @@ SHELL:=/bin/bash -SCHEMAHERO_TAG ?= 0.17.9 +SCHEMAHERO_TAG ?= 0.17.10 DOCKER_BUILD_ARGS ?= build_schema: diff --git a/pkg/image/constants.go b/pkg/image/constants.go index 0777591acb..64f3bc7889 100644 --- a/pkg/image/constants.go +++ b/pkg/image/constants.go @@ -5,9 +5,9 @@ package image // image name. const ( - Minio = "kotsadm/minio:0.20240803.043323-r0" + Minio = "kotsadm/minio:0.20240803.043323-r1" Rqlite = "kotsadm/rqlite:8.26.8-r0" - Dex = "kotsadm/dex:2.41.0-r0" - Schemahero = "schemahero/schemahero:0.17.9" + Dex = "kotsadm/dex:2.41.1-r0" + Schemahero = "schemahero/schemahero:0.17.10" Lvp = "replicated/local-volume-provider:v0.6.7" ) From 141e0b8802d52086e3b462b179e0a137777123a7 Mon Sep 17 00:00:00 2001 From: replicated-ci-kots <91219917+replicated-ci-kots@users.noreply.github.com> Date: Thu, 8 Aug 2024 12:09:44 +0000 Subject: [PATCH 035/123] Update KOTS image dependency tags (#4810) Co-authored-by: dydx <25685+dydx@users.noreply.github.com> --- .image.env | 2 +- Makefile | 2 +- pkg/image/constants.go | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.image.env b/.image.env index 2eb7218dcb..89d53f0d5e 100644 --- a/.image.env +++ b/.image.env @@ -2,7 +2,7 @@ # most recent tag is interpolated from the source repository and used to generate a fully qualified image # name. MINIO_TAG='0.20240803.043323-r1' -RQLITE_TAG='8.26.8-r0' +RQLITE_TAG='8.26.9-r0' DEX_TAG='2.41.1-r0' SCHEMAHERO_TAG='0.17.10' LVP_TAG='v0.6.7' \ No newline at end of file diff --git a/Makefile b/Makefile index 2280ac47c3..22138186ef 100644 --- a/Makefile +++ b/Makefile @@ -1,7 +1,7 @@ include Makefile.build.mk CURRENT_USER := $(if $(GITHUB_USER),$(GITHUB_USER),$(shell id -u -n)) MINIO_TAG ?= 0.20240803.043323-r1 -RQLITE_TAG ?= 8.26.8-r0 +RQLITE_TAG ?= 8.26.9-r0 DEX_TAG ?= 2.41.1-r0 LVP_TAG ?= v0.6.7 diff --git a/pkg/image/constants.go b/pkg/image/constants.go index 64f3bc7889..d00e3a7cde 100644 --- a/pkg/image/constants.go +++ b/pkg/image/constants.go @@ -6,7 +6,7 @@ package image const ( Minio = "kotsadm/minio:0.20240803.043323-r1" - Rqlite = "kotsadm/rqlite:8.26.8-r0" + Rqlite = "kotsadm/rqlite:8.26.9-r0" Dex = "kotsadm/dex:2.41.1-r0" Schemahero = "schemahero/schemahero:0.17.10" Lvp = "replicated/local-volume-provider:v0.6.7" From f02b6e73ef4a7c7fed79751615795208e148277a Mon Sep 17 00:00:00 2001 From: Florian Hines Date: Thu, 8 Aug 2024 11:22:52 -0500 Subject: [PATCH 036/123] feat: support for multi channel licenses (#4767) * feat: support for multi channel licenses --------- Co-authored-by: Salah Al Saleh --- .github/actions/kots-e2e/action.yml | 1 + .github/workflows/build-test.yaml | 35 ++++ cmd/kots/cli/install.go | 10 + cmd/kots/cli/pull.go | 56 ++--- cmd/kots/cli/util.go | 18 ++ cmd/kots/cli/util_test.go | 49 +++++ e2e/Makefile | 1 + e2e/e2e_test.go | 1 + e2e/inventory/inventory.go | 10 + .../tests/change-channel/license.yaml | 29 +++ .../tests/change-channel/test.spec.ts | 58 +++++ go.mod | 2 +- go.sum | 4 + integration/replicated/pull_test.go | 1 + .../tests/kitchen-sink/license.yaml | 49 ++++- migrations/tables/app.yaml | 2 + pkg/airgap/airgap.go | 1 + pkg/airgap/types/types.go | 9 +- pkg/airgap/update.go | 1 + pkg/app/types/app.go | 5 + pkg/automation/automation.go | 36 ++-- pkg/handlers/license.go | 57 +++-- pkg/handlers/update_checker_spec.go | 10 +- pkg/handlers/upgrade_service.go | 7 +- pkg/handlers/upgrade_service_test.go | 94 +++++++++ pkg/kotsadm/objects/configmaps_objects.go | 2 + pkg/kotsadm/types/deployoptions.go | 1 + pkg/kotsadmlicense/license.go | 4 +- pkg/kotsadmupstream/upstream.go | 1 + pkg/kotsutil/kots.go | 65 ++++++ pkg/kotsutil/kots_test.go | 198 ++++++++++++++++++ pkg/license/multichannel.go | 60 ++++++ pkg/online/online.go | 1 + pkg/online/types/types.go | 11 +- pkg/pull/pull.go | 6 +- pkg/registry/registry.go | 11 +- pkg/render/render.go | 48 +++-- pkg/render/types/interface.go | 13 +- pkg/replicatedapp/api.go | 8 +- pkg/replicatedapp/api_test.go | 11 +- pkg/replicatedapp/upstream.go | 3 +- pkg/rewrite/rewrite.go | 48 +++-- pkg/store/kotsstore/airgap_store.go | 4 +- pkg/store/kotsstore/app_store.go | 79 ++++++- pkg/store/kotsstore/downstream_store.go | 2 + pkg/store/kotsstore/license_store.go | 46 ++-- pkg/store/kotsstore/version_store.go | 1 - pkg/store/mock/mock.go | 44 +++- pkg/store/store_interface.go | 3 +- pkg/tests/pull/cases/airgap/testcase.yaml | 3 +- .../pull/cases/configcontext/testcase.yaml | 3 +- .../pull/cases/customhostnames/testcase.yaml | 3 +- pkg/tests/pull/cases/kotskinds/testcase.yaml | 3 +- pkg/tests/pull/cases/multidoc/testcase.yaml | 3 +- .../pull/cases/needsconfig/testcase.yaml | 3 +- .../pull/cases/replicatedhelm/testcase.yaml | 3 +- .../cases/required-helm-values/testcase.yaml | 3 +- .../cases/samechartvariations/testcase.yaml | 3 +- pkg/tests/pull/cases/simple/testcase.yaml | 3 +- .../pull/cases/subchart-alias/testcase.yaml | 3 +- .../pull/cases/subchart-crds/testcase.yaml | 3 +- pkg/tests/pull/cases/subcharts/testcase.yaml | 3 +- .../taganddigest-norewrite/testcase.yaml | 3 +- .../cases/taganddigest-rewrite/testcase.yaml | 3 +- .../pull/cases/v1beta2-charts/testcase.yaml | 3 +- .../cases/outdated-kotskinds/testcase.yaml | 1 + pkg/tests/renderdir/renderdir_test.go | 1 - pkg/update/required.go | 11 +- pkg/update/required_test.go | 124 +++++++++-- pkg/update/update.go | 21 +- pkg/update/update_test.go | 170 +++++++++++---- pkg/updatechecker/updatechecker.go | 14 +- pkg/upstream/fetch.go | 1 + pkg/upstream/fetch_test.go | 22 ++ pkg/upstream/replicated.go | 27 ++- pkg/upstream/types/types.go | 1 + 76 files changed, 1380 insertions(+), 277 deletions(-) create mode 100644 e2e/playwright/tests/change-channel/license.yaml create mode 100644 e2e/playwright/tests/change-channel/test.spec.ts create mode 100644 pkg/license/multichannel.go diff --git a/.github/actions/kots-e2e/action.yml b/.github/actions/kots-e2e/action.yml index 465fc7ee92..4dc16afeca 100644 --- a/.github/actions/kots-e2e/action.yml +++ b/.github/actions/kots-e2e/action.yml @@ -95,6 +95,7 @@ runs: - name: execute suite "${{ inputs.test-focus }}" env: TESTIM_ACCESS_TOKEN: ${{ inputs.testim-access-token }} + REPLICATED_API_TOKEN: ${{ inputs.replicated-api-token }} KOTS_NAMESPACE: ${{ inputs.kots-namespace }} run: | make -C e2e test \ diff --git a/.github/workflows/build-test.yaml b/.github/workflows/build-test.yaml index 40469c3027..269db08ca7 100644 --- a/.github/workflows/build-test.yaml +++ b/.github/workflows/build-test.yaml @@ -1085,6 +1085,40 @@ jobs: kots-dockerhub-username: '${{ secrets.E2E_DOCKERHUB_USERNAME }}' kots-dockerhub-password: '${{ secrets.E2E_DOCKERHUB_PASSWORD }}' + validate-change-channel: + runs-on: ubuntu-20.04 + needs: [ enable-tests, can-run-ci, build-kots, build-kotsadm, build-e2e, build-kurl-proxy, build-migrations, push-minio, push-rqlite ] + strategy: + fail-fast: false + matrix: + cluster: [ + {distribution: kind, version: v1.28.0} + ] + steps: + - name: Checkout + uses: actions/checkout@v4 + - name: download e2e deps + uses: actions/download-artifact@v4 + with: + name: e2e + path: e2e/bin/ + - run: docker load -i e2e/bin/e2e-deps.tar + - run: chmod +x e2e/bin/* + - name: download kots binary + uses: actions/download-artifact@v4 + with: + name: kots + path: bin/ + - run: chmod +x bin/* + - uses: ./.github/actions/kots-e2e + with: + test-focus: 'Change Channel' + kots-namespace: 'change-channel' + k8s-distribution: ${{ matrix.cluster.distribution }} + k8s-version: ${{ matrix.cluster.version }} + replicated-api-token: '${{ secrets.C11Y_MATRIX_TOKEN }}' + kots-dockerhub-username: '${{ secrets.E2E_DOCKERHUB_USERNAME }}' + kots-dockerhub-password: '${{ secrets.E2E_DOCKERHUB_PASSWORD }}' validate-minimal-rbac-override: runs-on: ubuntu-20.04 @@ -4130,6 +4164,7 @@ jobs: - validate-backup-and-restore - validate-no-required-config - validate-config + - validate-change-channel # non-testim tests - validate-minimal-rbac - validate-minimal-rbac-override diff --git a/cmd/kots/cli/install.go b/cmd/kots/cli/install.go index fb9d367fcf..5b8f7a1e5b 100644 --- a/cmd/kots/cli/install.go +++ b/cmd/kots/cli/install.go @@ -31,6 +31,7 @@ import ( kotsadmtypes "github.com/replicatedhq/kots/pkg/kotsadm/types" "github.com/replicatedhq/kots/pkg/kotsutil" "github.com/replicatedhq/kots/pkg/kurl" + kotslicense "github.com/replicatedhq/kots/pkg/license" "github.com/replicatedhq/kots/pkg/logger" "github.com/replicatedhq/kots/pkg/metrics" preflighttypes "github.com/replicatedhq/kots/pkg/preflight/types" @@ -162,6 +163,14 @@ func InstallCmd() *cobra.Command { }() upstream := pull.RewriteUpstream(args[0]) + preferredChannelSlug, err := extractPreferredChannelSlug(upstream) + if err != nil { + return errors.Wrap(err, "failed to extract preferred channel slug") + } + license, err = kotslicense.VerifyAndUpdateLicense(log, license, preferredChannelSlug, isAirgap) + if err != nil { + return errors.Wrap(err, "failed to verify and update license") + } namespace := v.GetString("namespace") @@ -278,6 +287,7 @@ func InstallCmd() *cobra.Command { IncludeMinio: v.GetBool("with-minio"), IncludeMinioSnapshots: v.GetBool("with-minio"), StrictSecurityContext: v.GetBool("strict-security-context"), + RequestedChannelSlug: preferredChannelSlug, RegistryConfig: *registryConfig, diff --git a/cmd/kots/cli/pull.go b/cmd/kots/cli/pull.go index a2df9b1f3d..d4dbdd0ba5 100644 --- a/cmd/kots/cli/pull.go +++ b/cmd/kots/cli/pull.go @@ -7,11 +7,12 @@ import ( "github.com/pkg/errors" "github.com/replicatedhq/kots/pkg/k8sutil" + "github.com/replicatedhq/kots/pkg/kotsutil" + kotslicense "github.com/replicatedhq/kots/pkg/license" "github.com/replicatedhq/kots/pkg/logger" "github.com/replicatedhq/kots/pkg/pull" registrytypes "github.com/replicatedhq/kots/pkg/registry/types" kotsv1beta1 "github.com/replicatedhq/kotskinds/apis/kots/v1beta1" - "github.com/replicatedhq/kotskinds/client/kotsclientset/scheme" "github.com/spf13/cobra" "github.com/spf13/viper" ) @@ -43,11 +44,13 @@ func PullCmd() *cobra.Command { } } - appSlug, err := getAppSlugForPull(args[0], v.GetString("license-file")) + license, err := getLicense(v) if err != nil { - return errors.Wrap(err, "failed to determine app slug") + return errors.Wrap(err, "failed to get license") } + appSlug := getAppSlugForPull(args[0], license) + namespace, err := getNamespaceOrDefault(v.GetString("namespace")) if err != nil { return errors.Wrap(err, "failed to get namespace") @@ -98,13 +101,30 @@ func PullCmd() *cobra.Command { } upstream := pull.RewriteUpstream(args[0]) - renderDir, err := pull.Pull(upstream, pullOptions) + preferredChannelSlug, err := extractPreferredChannelSlug(upstream) if err != nil { - return errors.Wrap(err, "failed to pull") + return errors.Wrap(err, "failed to extract preferred channel slug") } log := logger.NewCLILogger(cmd.OutOrStdout()) log.Initialize() + + // If we are passed a multi-channel license, verify that the requested channel is in the license + // so that we can warn the user immediately if it is not. + license, err = kotslicense.VerifyAndUpdateLicense(log, license, preferredChannelSlug, false) + if err != nil { + return errors.Wrap(err, "failed to verify and update license") + } + pullOptions.AppSelectedChannelID, err = kotsutil.FindChannelIDInLicense(preferredChannelSlug, license) + if err != nil { // should never happen since we just verified the channel + return errors.Wrap(err, "failed to find channel ID in license") + } + + renderDir, err := pull.Pull(upstream, pullOptions) + if err != nil { + return errors.Wrap(err, "failed to pull") + } + log.Info("Kubernetes application files created in %s", renderDir) if len(v.GetStringSlice("downstream")) == 0 { log.Info("To deploy, run kubectl apply -k %s", path.Join(renderDir, "overlays", "midstream")) @@ -146,28 +166,10 @@ func PullCmd() *cobra.Command { return cmd } -func getAppSlugForPull(uri string, licenseFile string) (string, error) { +func getAppSlugForPull(uri string, license *kotsv1beta1.License) string { appSlug := strings.Split(uri, "/")[0] - if licenseFile == "" { - return appSlug, nil - } - - licenseData, err := os.ReadFile(licenseFile) - if err != nil { - return "", errors.Wrap(err, "failed to read license file") - } - - decode := scheme.Codecs.UniversalDeserializer().Decode - decoded, gvk, err := decode(licenseData, nil, nil) - if err != nil { - return "", errors.Wrap(err, "unable to decode license file") - } - - if gvk.Group != "kots.io" || gvk.Version != "v1beta1" || gvk.Kind != "License" { - return "", errors.New("not an application license") + if license == nil { + return appSlug } - - license := decoded.(*kotsv1beta1.License) - - return license.Spec.AppSlug, nil + return license.Spec.AppSlug } diff --git a/cmd/kots/cli/util.go b/cmd/kots/cli/util.go index 4203831fcf..4d4ea33f56 100644 --- a/cmd/kots/cli/util.go +++ b/cmd/kots/cli/util.go @@ -7,6 +7,7 @@ import ( "strings" "github.com/pkg/errors" + "github.com/replicatedhq/kots/pkg/replicatedapp" "github.com/replicatedhq/kots/pkg/util" ) @@ -51,3 +52,20 @@ func splitEndpointAndNamespace(endpoint string) (string, string) { } return registryEndpoint, registryNamespace } + +func extractPreferredChannelSlug(upstreamURI string) (string, error) { + u, err := url.ParseRequestURI(upstreamURI) + if err != nil { + return "", errors.Wrap(err, "failed to parse uri") + } + + replicatedUpstream, err := replicatedapp.ParseReplicatedURL(u) + if err != nil { + return "", errors.Wrap(err, "failed to parse replicated url") + } + + if replicatedUpstream.Channel != nil { + return *replicatedUpstream.Channel, nil + } + return "stable", nil +} diff --git a/cmd/kots/cli/util_test.go b/cmd/kots/cli/util_test.go index 821490a80a..a270dbaecf 100644 --- a/cmd/kots/cli/util_test.go +++ b/cmd/kots/cli/util_test.go @@ -95,3 +95,52 @@ func Test_getHostFromEndpoint(t *testing.T) { }) } } + +func Test_extractPreferredChannelSlug(t *testing.T) { + type args struct { + upstreamURI string + } + tests := []struct { + name string + args args + want string + wantErr bool + }{ + { + "no channel", + args{ + upstreamURI: "replicated://app-slug", + }, + "stable", // default channel + false, + }, + { + "with channel", + args{ + upstreamURI: "replicated://app-slug/channel", + }, + "channel", + false, + }, + { + "invalid uri", + args{ + upstreamURI: "junk", + }, + "", + true, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + got, err := extractPreferredChannelSlug(tt.args.upstreamURI) + if (err != nil) != tt.wantErr { + t.Errorf("extractPreferredChannelSlug() error = %v, wantErr %v", err, tt.wantErr) + return + } + if got != tt.want { + t.Errorf("extractPreferredChannelSlug() = %v, want %v", got, tt.want) + } + }) + } +} diff --git a/e2e/Makefile b/e2e/Makefile index 846bcdb923..3fb0dae36e 100644 --- a/e2e/Makefile +++ b/e2e/Makefile @@ -32,6 +32,7 @@ test: docker run --rm -i --net host \ -e TESTIM_ACCESS_TOKEN \ -v $(BIN_DIR)/e2e.test:/usr/local/bin/e2e.test \ + -e REPLICATED_API_TOKEN \ -v $(KOTS_BIN_DIR)/kots:/usr/local/bin/kots \ -v $(KOTS_BIN_DIR)/kots:/usr/local/bin/kubectl-kots \ -v $(PLAYWRIGHT_DIR)/playwright-report:/playwright/playwright-report \ diff --git a/e2e/e2e_test.go b/e2e/e2e_test.go index ea47699c88..0abfca8436 100644 --- a/e2e/e2e_test.go +++ b/e2e/e2e_test.go @@ -221,6 +221,7 @@ var _ = Describe("E2E", func() { Entry(nil, inventory.MultiAppTest()), Entry(nil, inventory.NewSupportBundle()), Entry(nil, inventory.NewGitOps()), + Entry(nil, inventory.NewChangeChannel()), ) }) diff --git a/e2e/inventory/inventory.go b/e2e/inventory/inventory.go index 7b2affdff8..cb8d20f1fb 100644 --- a/e2e/inventory/inventory.go +++ b/e2e/inventory/inventory.go @@ -169,6 +169,16 @@ func NewGitOps() Test { } } +func NewChangeChannel() Test { + return Test{ + ID: "change-channel", + Name: "Change Channel", + Namespace: "change-channel", + AppSlug: "change-channel", + UpstreamURI: "change-channel/automated", + } +} + func SetupRegressionTest(kubectlCLI *kubectl.CLI) TestimParams { cmd := kubectlCLI.Command( context.Background(), diff --git a/e2e/playwright/tests/change-channel/license.yaml b/e2e/playwright/tests/change-channel/license.yaml new file mode 100644 index 0000000000..a050aa766b --- /dev/null +++ b/e2e/playwright/tests/change-channel/license.yaml @@ -0,0 +1,29 @@ +apiVersion: kots.io/v1beta1 +kind: License +metadata: + name: github-action +spec: + appSlug: change-channel + channelID: 2k6j62KPRQLjO0tF9zZB6zJJukg + channelName: Automated + channels: + - channelID: 2k6j62KPRQLjO0tF9zZB6zJJukg + channelName: Automated + channelSlug: automated + endpoint: https://replicated.app + isDefault: true + customerName: github-action + endpoint: https://replicated.app + entitlements: + expires_at: + description: License Expiration + signature: {} + title: Expiration + value: "" + valueType: String + isKotsInstallEnabled: true + isNewKotsUiEnabled: true + licenseID: 2k6jempcB6aQyddcIEBSTj0Bvvv + licenseSequence: 16 + licenseType: trial + signature: eyJsaWNlbnNlRGF0YSI6ImV5SmhjR2xXWlhKemFXOXVJam9pYTI5MGN5NXBieTkyTVdKbGRHRXhJaXdpYTJsdVpDSTZJa3hwWTJWdWMyVWlMQ0p0WlhSaFpHRjBZU0k2ZXlKdVlXMWxJam9pWjJsMGFIVmlMV0ZqZEdsdmJpSjlMQ0p6Y0dWaklqcDdJbXhwWTJWdWMyVkpSQ0k2SWpKck5tcGxiWEJqUWpaaFVYbGtaR05KUlVKVFZHb3dRbloyZGlJc0lteHBZMlZ1YzJWVWVYQmxJam9pZEhKcFlXd2lMQ0pqZFhOMGIyMWxjazVoYldVaU9pSm5hWFJvZFdJdFlXTjBhVzl1SWl3aVlYQndVMngxWnlJNkltTm9ZVzVuWlMxamFHRnVibVZzSWl3aVkyaGhibTVsYkVsRUlqb2lNbXMyYWpZeVMxQlNVVXhxVHpCMFJqbDZXa0kyZWtwS2RXdG5JaXdpWTJoaGJtNWxiRTVoYldVaU9pSkJkWFJ2YldGMFpXUWlMQ0pqYUdGdWJtVnNjeUk2VzNzaVkyaGhibTVsYkVsRUlqb2lNbXMyYWpZeVMxQlNVVXhxVHpCMFJqbDZXa0kyZWtwS2RXdG5JaXdpWTJoaGJtNWxiRk5zZFdjaU9pSmhkWFJ2YldGMFpXUWlMQ0pqYUdGdWJtVnNUbUZ0WlNJNklrRjFkRzl0WVhSbFpDSXNJbWx6UkdWbVlYVnNkQ0k2ZEhKMVpTd2laVzVrY0c5cGJuUWlPaUpvZEhSd2N6b3ZMM0psY0d4cFkyRjBaV1F1WVhCd0luMWRMQ0pzYVdObGJuTmxVMlZ4ZFdWdVkyVWlPakUyTENKbGJtUndiMmx1ZENJNkltaDBkSEJ6T2k4dmNtVndiR2xqWVhSbFpDNWhjSEFpTENKbGJuUnBkR3hsYldWdWRITWlPbnNpWlhod2FYSmxjMTloZENJNmV5SjBhWFJzWlNJNklrVjRjR2x5WVhScGIyNGlMQ0prWlhOamNtbHdkR2x2YmlJNklreHBZMlZ1YzJVZ1JYaHdhWEpoZEdsdmJpSXNJblpoYkhWbElqb2lJaXdpZG1Gc2RXVlVlWEJsSWpvaVUzUnlhVzVuSWl3aWMybG5ibUYwZFhKbElqcDdmWDE5TENKcGMwNWxkMHR2ZEhOVmFVVnVZV0pzWldRaU9uUnlkV1VzSW1selMyOTBjMGx1YzNSaGJHeEZibUZpYkdWa0lqcDBjblZsZlgwPSIsImlubmVyU2lnbmF0dXJlIjoiZXlKc2FXTmxibk5sVTJsbmJtRjBkWEpsSWpvaWRsRmpjWGt6T1hRellYQnRabWhTVFdoR01HdE5jblp2YlhST1pGZDBaR3Q1UW1zNVZWbHBaM2MzT0ZKMU56Z3Jaa0V5ZW1aVVRGTXJNV1JMUkRCcVNWcG5SbkZhYkRCRlJVaHJWbmRWUld0bE5IWk9RV2QyY1VsdWJrcDJXVGxNWWpKNGVUTk1NMDFQY1VjMk1GZERZV1l3VGxkUVpWTm9jbTVHYldSSmVXcG1SRFpOTUhsWVVUWndZVkpaZVU0MWFsaEdPVUZVY0dWVU5VSXpWVnBYVkdwb1R6QTJPVk5GYVdkUGEyeExjRlYzU3pZclRGbENPV2xEVWk5bWMyNXdkbU5vV0ROYU1HSjVSSGhtZEZnMFF6Rk1XWEF4VVc5MWRITjZNMkl2TVZZMWRXOUdMemd6YlZGUVRsQXplVEZrT1hadVFYazFlV1VyWVd4cE1HTm1RalZuYmpoTFYybERkRTFsVHk5aGNHRnFZbTlVTmpoTVdGUXZRbWhTUnpaQlJVTTBaWFp4Vkd4aVNYTXhZVTFOWW0wM2VIcGFlVFo2Y2twNVFWRXJjVzA1TmxWVVpGUjRiekJ4VUdKRFJrVndWSGhyYzJKQlBUMGlMQ0p3ZFdKc2FXTkxaWGtpT2lJdExTMHRMVUpGUjBsT0lGQlZRa3hKUXlCTFJWa3RMUzB0TFZ4dVRVbEpRa2xxUVU1Q1oydHhhR3RwUnpsM01FSkJVVVZHUVVGUFEwRlJPRUZOU1VsQ1EyZExRMEZSUlVFeFFWRmFRa2xEZW5wemRXTnVXV1JNVlM5YU1GeHVNSGsxTVc5U1EzaGxNVzFRWTBvNVUxbzRORlJqZUVScFVVZFNTRzluV2pZMVQyWklWV3g1V21Sb09FeEpOSFpYZFRKRGJVVnpkbVppV1VOS05VWlRTRnh1UlhSeVkzWnhURTlUWTJVemNsaHZhR2RNVmpkNVRtaFZNa3cxUm1vMWFuRXhkelU0WjBWbGVHTXJZbTUxVVdvME16TXJOR2s0VkZWTk1tNUZVVzFKY1Z4dU1tZHNOa1JxUWk5Sk1YWnNVMjQxTmtvdk1IVmhSWHBaVjFBck4ySkhlbTEzT0dNeWQycEJhRTFyUkZJck5USlBRM2hHY1dGaFExbDBaemROTDBWbE5seHVaWFIzWVRGNFREUlNSMlJCSzNkTFYzaDRWa1VyYjAxMlluQjROMXA1WWxJdldERjBRazlvZWtaSVdISjBaa2RCYm5CWE1sQkRjbVJ4Um1oMWVsWlZMMXh1TUhWSVRuVk1URkV5ZVVaemNFVjJUa1V4YlVKRFpqZHpUR2hNY205M1RVRlBWRnAxWkZJNGFtMXJTMnhJWlROT2MzUnlUekl2ZVVadWN6bHZWRnBoTWx4dWJYZEpSRUZSUVVKY2JpMHRMUzB0UlU1RUlGQlZRa3hKUXlCTFJWa3RMUzB0TFZ4dUlpd2lhMlY1VTJsbmJtRjBkWEpsSWpvaVpYbEtlbUZYWkhWWldGSXhZMjFWYVU5cFNsQmhhbVJ4VWtaT2MwMHljSEJhVjFKMVlsZDRiV05GTVhsVFJXUnRUVzVCTldJd1VUUmFSMFY0WTBka2VrOVhUbFpoVjJSRllXdHNTbEpXYUhwbGF6VlBWakZPVkU1SVJrMWhhWFJMVlhwc2JXSXhWa1pTTUhoNFUzazROV0l6VGxKV2JtUXhVbTVXTldNeFVsSmllWFJEWWpGQk0wMUhVbHBqYkc4d1lUSTViRk13UlhoaFdHUmFZbnBhV0dGVWJFcFphMk15U3pCUmQxTkhjRWRrYlhnelVtMVZNbUpUZEV0a2JsSlBZak5yTldSR1ZuRlRXRkpUVmpGSmVtRnJNVmRWUkZwUllsVTRkMWRYVWt4UFNFMTZWMWRhVldOdVRrOWlibWgxV2pGUk1WWlZUVEZhVkVKM1UxVTVWMXBYVGpOVlZrSkhWa2hqZGxSc1dsQmlSVnBxWVRCS05rOUlRbHBsVjBaTVpESlZNbE5YZEhWT1EzUndVbXBDVTJSVVVsQk9NalZDWVRBNGNsRnNhR3BUYlZZeldYcGtRMVZVUms5bFJXUmhVV3hGTkU1VmR6VmtSM2N4WTBaa2NsTkZUbmRMTWxadFVqSkpNV1J1UmpKU1NFcHRWVlZhZEdNelJrWlhVemxIV1dwYVVWZFliSE5OYlU1RVZucHNSVmx1YUhWWFIzUnJZbFpqTVU5VVdsWlhiVkV6VDFadmNsZFlVbmRNTVdSdFpWZEtlVlpHYnpOaVIxSnpaRzVzYjJNd05XaGpTRlpYWTFST1VrNXNiSFZhTVdoMFRXNXdOVnBIWXpsUVUwbHpTVzFrYzJJeVNtaGlSWFJzWlZWc2EwbHFiMmxaYlZKc1dsUlZNazVVV1hkWk1scHBUa1JPYWs5WFNYbFBSMHB0VDFSb2JGbFhUbWhhYlVVeVRrUlphV1pSUFQwaWZRPT0ifQ== \ No newline at end of file diff --git a/e2e/playwright/tests/change-channel/test.spec.ts b/e2e/playwright/tests/change-channel/test.spec.ts new file mode 100644 index 0000000000..3ab19014aa --- /dev/null +++ b/e2e/playwright/tests/change-channel/test.spec.ts @@ -0,0 +1,58 @@ +import { test, expect } from '@playwright/test'; +import { login, uploadLicense } from '../shared'; + +const CUSTOMER_ID = '2k6jemHbYgZFqtwgyjqiVfjRQqi'; +const APP_ID = '2k6j65t0STtrZ1emyP5PUqBIQ23'; +const AUTOMATED_CHANNEL_ID = '2k6j62KPRQLjO0tF9zZB6zJJukg'; +const ALTERNATE_CHANNEL_ID = '2k6j61j49IPyDyQlbmRZJsxy3TP'; + +test('change channel', async ({ page }) => { + test.slow(); + await changeChannel(AUTOMATED_CHANNEL_ID); + await login(page); + await uploadLicense(page, expect); + await page.getByRole('button', { name: 'Deploy' }).click(); + await expect(page.locator('#app')).toContainText('Automated'); + await changeChannel(ALTERNATE_CHANNEL_ID); + + await page.getByText('Sync license').click(); + + await expect(page.getByLabel('Next step')).toContainText('License synced', { timeout: 10000 }); + await page.getByRole('button', { name: 'Ok, got it!' }).click(); + + await expect(page.locator('#app')).toContainText('Alternate'); + await expect(page.locator('#app')).toContainText('1.0.3', { timeout: 10000 }); + await expect(page.locator('#app')).toContainText('Upstream Update', { timeout: 10000 }); + + await page.getByRole('button', { name: 'Deploy', exact: true }).click(); + await page.getByRole('button', { name: 'Yes, Deploy' }).click(); + + await expect(page.locator('#app')).toContainText('Currently deployed version', { timeout: 15000 }); + await expect(page.getByText('v1.0.0')).not.toBeVisible(); + await expect(page.getByText('1.0.3')).toBeVisible(); +}); + +async function changeChannel(channelId: string) { + await fetch(`https://api.replicated.com/vendor/v3/customer/${CUSTOMER_ID}`, { + method: 'PUT', + headers: { + 'Content-Type': 'application/json', + 'Authorization': process.env.REPLICATED_API_TOKEN, + }, + body: JSON.stringify({ + "app_id": APP_ID, + "name": "github-action", // customer name + "channels": [ + { + "channel_id": channelId, + "pinned_channel_sequence": null, + "is_default_for_customer": true + } + ] + }) + }).then(response => { + if (!response.ok) { + throw new Error(`Unexpected status code: ${response.status}`); + } + }); +} \ No newline at end of file diff --git a/go.mod b/go.mod index 8b3809fc1e..07a7e88b47 100644 --- a/go.mod +++ b/go.mod @@ -49,7 +49,7 @@ require ( github.com/pkg/errors v0.9.1 github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 github.com/replicatedhq/embedded-cluster-kinds v1.4.7 - github.com/replicatedhq/kotskinds v0.0.0-20240621084729-1eb1e3eac6f2 + github.com/replicatedhq/kotskinds v0.0.0-20240718194123-1018dd404e95 github.com/replicatedhq/kurlkinds v1.5.0 github.com/replicatedhq/troubleshoot v0.95.1 github.com/replicatedhq/yaml/v3 v3.0.0-beta5-replicatedhq diff --git a/go.sum b/go.sum index ba629b5d88..652c867255 100644 --- a/go.sum +++ b/go.sum @@ -1317,6 +1317,10 @@ github.com/replicatedhq/embedded-cluster-kinds v1.4.7 h1:CR55z8Q2ek90BwwwOEz+P3q github.com/replicatedhq/embedded-cluster-kinds v1.4.7/go.mod h1:AwopUvvGcaWO4mn9DkbPj5RnLuOy756CNLrcaAlmjMo= github.com/replicatedhq/kotskinds v0.0.0-20240621084729-1eb1e3eac6f2 h1:xL4u2RHhMaGDgz7Lol5MhVYLnWahV3sCJZbfebpPao0= github.com/replicatedhq/kotskinds v0.0.0-20240621084729-1eb1e3eac6f2/go.mod h1:QjhIUu3+OmHZ09u09j3FCoTt8F3BYtQglS+OLmftu9I= +github.com/replicatedhq/kotskinds v0.0.0-20240717145110-8eb39e8b3a41 h1:xvvRq5EZ7wBlsrDZIAUpJ318cEMzTpt8zVAO2atFQlM= +github.com/replicatedhq/kotskinds v0.0.0-20240717145110-8eb39e8b3a41/go.mod h1:QjhIUu3+OmHZ09u09j3FCoTt8F3BYtQglS+OLmftu9I= +github.com/replicatedhq/kotskinds v0.0.0-20240718194123-1018dd404e95 h1:JhwPz4Bgbz5iYl3UV2EB+HnF9oW/eCRi+hASAz+J6XI= +github.com/replicatedhq/kotskinds v0.0.0-20240718194123-1018dd404e95/go.mod h1:QjhIUu3+OmHZ09u09j3FCoTt8F3BYtQglS+OLmftu9I= github.com/replicatedhq/kurlkinds v1.5.0 h1:zZ0PKNeh4kXvSzVGkn62DKTo314GxhXg1TSB3azURMc= github.com/replicatedhq/kurlkinds v1.5.0/go.mod h1:rUpBMdC81IhmJNCWMU/uRsMETv9P0xFoMvdSP/TAr5A= github.com/replicatedhq/termui/v3 v3.1.1-0.20200811145416-f40076d26851 h1:eRlNDHxGfVkPCRXbA4BfQJvt5DHjFiTtWy3R/t4djyY= diff --git a/integration/replicated/pull_test.go b/integration/replicated/pull_test.go index 5fc1638b7e..37e94d3881 100644 --- a/integration/replicated/pull_test.go +++ b/integration/replicated/pull_test.go @@ -64,6 +64,7 @@ func Test_PullReplicated(t *testing.T) { ExcludeAdminConsole: true, ExcludeKotsKinds: true, Silent: true, + AppSelectedChannelID: "1vusIYZLAVxMG6q760OJmRKj5i5", } _, err = pull.Pull("replicated://integration", pullOptions) req.NoError(err) diff --git a/integration/replicated/tests/kitchen-sink/license.yaml b/integration/replicated/tests/kitchen-sink/license.yaml index 70b7866fd1..0d50122ad3 100644 --- a/integration/replicated/tests/kitchen-sink/license.yaml +++ b/integration/replicated/tests/kitchen-sink/license.yaml @@ -1,22 +1,49 @@ apiVersion: kots.io/v1beta1 kind: License metadata: - name: kots + creationTimestamp: null + name: testcustomer spec: - licenseID: WQ1srPj9HDmfBG-iHgwniEeUCaF2Ic-y - licenseType: dev - customerName: kots - appSlug: kitchen-sink - channelName: Unstable - licenseSequence: 1 + appSlug: my-app + channelID: 1vusIYZLAVxMG6q760OJmRKj5i5 + channelName: My Channel + customerName: Test Customer endpoint: https://replicated.app entitlements: + bool_field: + title: Bool Field + value: true + valueType: Boolean expires_at: - title: Expiration description: License Expiration - value: '' + title: Expiration + value: "2030-07-27T00:00:00Z" + valueType: String + hidden_field: + isHidden: true + title: Hidden Field + value: this is secret + valueType: String + int_field: + title: Int Field + value: 123 + valueType: Integer + string_field: + title: StringField + value: single line text valueType: String + text_field: + title: Text Field + value: |- + multi + line + text + valueType: Text isAirgapSupported: true isGitOpsSupported: true - signature: >- - eyJsaWNlbnNlRGF0YSI6ImV5SmhjR2xXWlhKemFXOXVJam9pYTI5MGN5NXBieTkyTVdKbGRHRXhJaXdpYTJsdVpDSTZJa3hwWTJWdWMyVWlMQ0p0WlhSaFpHRjBZU0k2ZXlKdVlXMWxJam9pYTI5MGN5SjlMQ0p6Y0dWaklqcDdJbXhwWTJWdWMyVkpSQ0k2SWxkUk1YTnlVR281U0VSdFprSkhMV2xJWjNkdWFVVmxWVU5oUmpKSll5MTVJaXdpYkdsalpXNXpaVlI1Y0dVaU9pSmtaWFlpTENKamRYTjBiMjFsY2s1aGJXVWlPaUpyYjNSeklpd2lZWEJ3VTJ4MVp5STZJbXRwZEdOb1pXNHRjMmx1YXlJc0ltTm9ZVzV1Wld4T1lXMWxJam9pVlc1emRHRmliR1VpTENKc2FXTmxibk5sVTJWeGRXVnVZMlVpT2pFc0ltVnVaSEJ2YVc1MElqb2lhSFIwY0hNNkx5OXlaWEJzYVdOaGRHVmtMbUZ3Y0NJc0ltVnVkR2wwYkdWdFpXNTBjeUk2ZXlKbGVIQnBjbVZ6WDJGMElqcDdJblJwZEd4bElqb2lSWGh3YVhKaGRHbHZiaUlzSW1SbGMyTnlhWEIwYVc5dUlqb2lUR2xqWlc1elpTQkZlSEJwY21GMGFXOXVJaXdpZG1Gc2RXVWlPaUlpTENKMllXeDFaVlI1Y0dVaU9pSlRkSEpwYm1jaWZYMHNJbWx6UVdseVoyRndVM1Z3Y0c5eWRHVmtJanAwY25WbExDSnBjMGRwZEU5d2MxTjFjSEJ2Y25SbFpDSTZkSEoxWlgxOSIsImlubmVyU2lnbmF0dXJlIjoiZXlKc2FXTmxibk5sVTJsbmJtRjBkWEpsSWpvaVJFRkVVVTFXTTJkRFprdG5iMkZKYVRoSmNUVnJUV051WTJWb2FpOUJNVkIyYUZkb2QxWkhRVEpYT1ZoUVdYVjVPWE5TZHpCaU4wZ3lPRlJ5WlRadE1XUjBOazh5UlZoak1ISlBVbTFyT0dkRVZEWjJTRTF6Y2xWMFpWSXplQ3N5WWtWVU1XRnRhVWQxZDBWRFIwRnJOMnBWUkhVMFozRjNLemhvYlZOTmMxSm1iMVZLVjFGaWNVVkJOMW96UVRSVGNYVm1Va3MyZEVKUVMwcHVRek12TnpsTFJrc3JNaTlSVUVaSk0yTkRUbEZ5U1VnM04xQXhRa1ZSUVRGVU5XbFJiWEoxYURoRVVYVkRORVpCU1ZWSlpqTk9jSEZLY1dsa2IyWlpjVE52VERGaGIyNW5jWGsxUzNWQ2IwdDNhVFY2SzFkeFNDOTVLM1IwYWpOTGVYbDBPR0ZHV1ZSVWN6RnVOemRQVEZaRWVsSTBUR3R3TURGSlpUZ3dhM1JMYmtKVFoyRm5VWEJtWkhwM1VrVnpha2xKU1hGdU9IWXlXR05WU0ZaVVQxUTRha1J5UkZVd2FGQkpjaTg0WjJ4dlRrczBRMlJrY1ZoblBUMGlMQ0p3ZFdKc2FXTkxaWGtpT2lJdExTMHRMVUpGUjBsT0lGQlZRa3hKUXlCTFJWa3RMUzB0TFZ4dVRVbEpRa2xxUVU1Q1oydHhhR3RwUnpsM01FSkJVVVZHUVVGUFEwRlJPRUZOU1VsQ1EyZExRMEZSUlVGeVUzQmtkMDVpYkhSUUswODRMMFI0Y25FNFZseHVhR1pyTDNOVlZHeEJWMHhyWm5Wak1WY3pOM1p5ZFdVeGFGTlRjMHB4TldSelNIcDNiVzVtT0dORVNtdGxjSFZGWm5aUFZDOXNibTlMUjBNcmRFaFZibHh1UXpsbVRIYzViMEZPV21Wc1JIVkphemcyT1ZsSmVHdDFiVGh2Y0ZaSk0wWXdZMmh2Wm1vM0t5dENTVVIyTVhVcldITmFiR3cwVVZabmFraEZSM3BGVDF4dWQwdEtha3RYWlUxWWFYUldTSFZTZVdkNlZsSXZUemR3VUVnM09WbEVVMUJoWkV4SmFYZFFNM2gwVFhwU2QwMVJTMnRHTm1WS2RUbDJaSFExSzJSaVpWeHVVWFpUZVUxVVJHODJSV3gwYVdkMWJFTmFkemx3VldaU1MwWXlkVTUzTDJOd2MxaFhSWFpZU1ZCRU5EZzRVMlEwWWt3ellrWXZNMkY1Ym04NFlrbFlWbHh1YzB3NVV6UlBaREZSV25KNFJVUndabXhtU2pGbVN5OU9VV1JKVm1GVkwxZHRiREZyZWtGM2NESkhWMlJZUVhwS2N6VjJSVTF6YW5CcVR6VmpZVTlQTVZ4dU5uZEpSRUZSUVVKY2JpMHRMUzB0UlU1RUlGQlZRa3hKUXlCTFJWa3RMUzB0TFZ4dUlpd2lhMlY1VTJsbmJtRjBkWEpsSWpvaVpYbEtlbUZYWkhWWldGSXhZMjFWYVU5cFNsUmlia3BYWWtaT2RGZEVXbEpoVlVZMFRrVk9XVlZZV25sbGJFSkxWRVJGZGs1V1VtNWhNSGh6Vkd4cmVsZEZlR3RrTVd4WFQxWkJNMUpUZEc5V1JVcDBZVEJHYW1WWFVrZGFNSEJTVGtad2QxcFhhRlZpUkZKM1pFUlNURXN6WkZkT2VscEpZMms1ZWxaWVdsRlJNRXAwVlVjNVdHUlZWalpaTTA0MVlrWnNVRmRxWkZwaU1qVnhXVEJHZUZOcmNHcE9Semx2Wkc1YU1rMUZiRlpTYlRGaFdtcENUMVJGVG0xVWJWbzBUMFZrVTFveVpEVlNSRll3VjBSa1RWb3phRXRXZW1SM1QwaGtWV1F6VG1sbFJHUTBXVlJOTUdGR2FFSlRSbWg2WTJwT2JVOUZOV2xYUlZJeVZFUkdNMW94VWs5aGJFWjZZVlZqY2xKRE9ETk5WelZxVkRKV05sZFdiRFJVV0Vwd1QxYzRkbFV5VmpaU1JGSkdUbGhSZGxkSVpISlNNM0J4WWpCdmNrOVliM0pYYkZKVVRYcFNlbUZ0VFhkU1JGSm9VbGRXVEU5WGFFaE9WVko0WkVWNFRGbHRPSHBYYTA1WVdsY3hTR05JUm5kaWJrWjVWa2hzYjFkVVZscGtWVko0WTFSS01GZFRPVXRhTUdNelRsWkNhRTE1ZEZWak1tTXlWMWRTVjFWRll6UlNNRFI2WWxob1MwNUlhelJoTVVrMVYwWnNjV0ZGYjNkUmJVNXdZbXBTVTFJd09WbGlNakZvVVRKb2FWUnJaRFJWYkVvelQxZGFkbGRGUlRsUVUwbHpTVzFrYzJJeVNtaGlSWFJzWlZWc2EwbHFiMmxaYlZKc1dsUlZNazVVV1hkWk1scHBUa1JPYWs5WFNYbFBSMHB0VDFSb2JGbFhUbWhhYlVVeVRrUlphV1pSUFQwaWZRPT0ifQ== \ No newline at end of file + isSnapshotSupported: true + licenseID: 1vusOokxAVp1tkRGuyxnF23PJcq + licenseSequence: 7 + licenseType: prod + signature: eyJsaWNlbnNlRGF0YSI6ImV5SmhjR2xXWlhKemFXOXVJam9pYTI5MGN5NXBieTkyTVdKbGRHRXhJaXdpYTJsdVpDSTZJa3hwWTJWdWMyVWlMQ0p0WlhSaFpHRjBZU0k2ZXlKdVlXMWxJam9pZEdWemRHTjFjM1J2YldWeUluMHNJbk53WldNaU9uc2liR2xqWlc1elpVbEVJam9pTVhaMWMwOXZhM2hCVm5BeGRHdFNSM1Y1ZUc1R01qTlFTbU54SWl3aWJHbGpaVzV6WlZSNWNHVWlPaUp3Y205a0lpd2lZM1Z6ZEc5dFpYSk9ZVzFsSWpvaVZHVnpkQ0JEZFhOMGIyMWxjaUlzSW1Gd2NGTnNkV2NpT2lKdGVTMWhjSEFpTENKamFHRnVibVZzU1VRaU9pSXhkblZ6U1ZsYVRFRldlRTFITm5FM05qQlBTbTFTUzJvMWFUVWlMQ0pqYUdGdWJtVnNUbUZ0WlNJNklrMTVJRU5vWVc1dVpXd2lMQ0pzYVdObGJuTmxVMlZ4ZFdWdVkyVWlPamNzSW1WdVpIQnZhVzUwSWpvaWFIUjBjSE02THk5eVpYQnNhV05oZEdWa0xtRndjQ0lzSW1WdWRHbDBiR1Z0Wlc1MGN5STZleUppYjI5c1gyWnBaV3hrSWpwN0luUnBkR3hsSWpvaVFtOXZiQ0JHYVdWc1pDSXNJblpoYkhWbElqcDBjblZsTENKMllXeDFaVlI1Y0dVaU9pSkNiMjlzWldGdUluMHNJbVY0Y0dseVpYTmZZWFFpT25zaWRHbDBiR1VpT2lKRmVIQnBjbUYwYVc5dUlpd2laR1Z6WTNKcGNIUnBiMjRpT2lKTWFXTmxibk5sSUVWNGNHbHlZWFJwYjI0aUxDSjJZV3gxWlNJNklqSXdNekF0TURjdE1qZFVNREE2TURBNk1EQmFJaXdpZG1Gc2RXVlVlWEJsSWpvaVUzUnlhVzVuSW4wc0ltaHBaR1JsYmw5bWFXVnNaQ0k2ZXlKMGFYUnNaU0k2SWtocFpHUmxiaUJHYVdWc1pDSXNJblpoYkhWbElqb2lkR2hwY3lCcGN5QnpaV055WlhRaUxDSjJZV3gxWlZSNWNHVWlPaUpUZEhKcGJtY2lMQ0pwYzBocFpHUmxiaUk2ZEhKMVpYMHNJbWx1ZEY5bWFXVnNaQ0k2ZXlKMGFYUnNaU0k2SWtsdWRDQkdhV1ZzWkNJc0luWmhiSFZsSWpveE1qTXNJblpoYkhWbFZIbHdaU0k2SWtsdWRHVm5aWElpZlN3aWMzUnlhVzVuWDJacFpXeGtJanA3SW5ScGRHeGxJam9pVTNSeWFXNW5SbWxsYkdRaUxDSjJZV3gxWlNJNkluTnBibWRzWlNCc2FXNWxJSFJsZUhRaUxDSjJZV3gxWlZSNWNHVWlPaUpUZEhKcGJtY2lmU3dpZEdWNGRGOW1hV1ZzWkNJNmV5SjBhWFJzWlNJNklsUmxlSFFnUm1sbGJHUWlMQ0oyWVd4MVpTSTZJbTExYkhScFhHNXNhVzVsWEc1MFpYaDBJaXdpZG1Gc2RXVlVlWEJsSWpvaVZHVjRkQ0o5ZlN3aWFYTkJhWEpuWVhCVGRYQndiM0owWldRaU9uUnlkV1VzSW1selIybDBUM0J6VTNWd2NHOXlkR1ZrSWpwMGNuVmxMQ0pwYzFOdVlYQnphRzkwVTNWd2NHOXlkR1ZrSWpwMGNuVmxmWDA9IiwiaW5uZXJTaWduYXR1cmUiOiJleUpzYVdObGJuTmxVMmxuYm1GMGRYSmxJam9pYUhneE1XTXZUR1ozUTNoVE5YRmtRWEJGU1hGdVRrMU9NMHBLYTJzNFZHZFhSVVpzVDFKVlJ6UjJjR1YzZEZoV1YzbG1lamRZY0hBd1ExazJZamRyUVRSS2N6TklhR3d3YkZJMFdUQTFMemN2UVVkQ2FEZFZNSGczUkhaTVozUXpVM00wYm5GTFZTdFhXRXBTVHpKWVFVRnZSME4xZFRWR1RGcHJRVWhYY1RSUVFtMXphSFY2Y1ZsdmNucHhlbGhGWVZWVlpFUlVkVXhDTW1nNWFIZ3dXRWhQUmxwUk16bHVkbTlPUjJaT2R5OTRTVmRaZEhSUGRYZHZhMncyTVZsb1JVeFZlRmQxU1ZSRmMwTlVhM2xtTVRNd09IazVSbFJzWlRKeVYyZEVlSEZNYTBSUFNXVXlPRWwzUzJSQkwySXdWVUl5VEZGbVRWcHdWemwyUTNCSkwybHlWek5uYmpaeU5WWjNWMjB2U1dweWJtNDNSelJrVmpadVYzcFRkMGhQUTJSdWEwMTRNRXQ1VVVOa0wxQjFaWEpUYjNSdVEwOXRTMDEzWlRSTGJqaERkMU5YVVRRNGRURkRNbTFpV1VzeGRYTlpOM1YzUFQwaUxDSndkV0pzYVdOTFpYa2lPaUl0TFMwdExVSkZSMGxPSUZCVlFreEpReUJMUlZrdExTMHRMVnh1VFVsSlFrbHFRVTVDWjJ0eGFHdHBSemwzTUVKQlVVVkdRVUZQUTBGUk9FRk5TVWxDUTJkTFEwRlJSVUZ6TkhKdlVIcDFhV1JNZVhOMmIxWTJkemxhTkZ4dVdHRmliME5tWTJNeGFHZFZhQ3N3V1VkS2NFNURSVXhyTjBaTFF5OTJhemR6ZERsR05tY3dUMjlrU0VSbGVYZFJXa2hLZFU1TVpsUnNRbEJHUTJOaU5seHVObTlzVEZOeWNGQTRjbFUzU0d4SGJsRkVSMFJNYVhkS1EyaGtSRGRVVUdSM2FXdHBkMHRGY201aldqaEdaalZsU25vd2RETmlUWFpyVDJaVVluSkJiRnh1WWtGQ1kwbzVNVmxVT1hKdVVXOXFkVWN4UldKUVRqaEZWblI2TWxZNE5IZHViR2Q0TUhCd2JEVjRPSFpOYlhwcE1ISnVibEZVV1VGamJ6WnFhMnBJTTF4dVRuTlVkWE4xUzFkdlJGUjVNWE5yZGtSUk9IbEJZV0ptWTNNME4zWnNRazAwU0RGT1JFNHZSSFJhWWxZdllubDJia0o2YkM4eFZrVnpURmRqWlZWcFRGeHVSWEYxT0VkeWF5dFFVRGQyUkdSd2JFUjNjWFpQV2t4RmRYazNkamhuUm01U09WUlVSV3ByTlVvNWRuWlVTR2RtU25VemVubEVPR2xLWTBSRE5YcHFPVnh1YjFGSlJFRlJRVUpjYmkwdExTMHRSVTVFSUZCVlFreEpReUJMUlZrdExTMHRMVnh1SWl3aWEyVjVVMmxuYm1GMGRYSmxJam9pWlhsS2VtRlhaSFZaV0ZJeFkyMVZhVTlwU2pCUldIQjJXVE5LVms1NmFGaFNSMlJzVVRKb2NtTklXa1ZVVlRsRldqQktXVTFGUmtaVFJFNUZVMGhLYkUxclRUTkxNSEJFVkROR2VGTnROVVJVVlRWVlltMDFiVnBGUm5sWldIQjZaRVJqTVZaSGFFeFBXRUpVVWtacmRrd3diek5aTUZaSlVteFdWRXd5T1VoV1JXeHNWa1ZPTUZSSE1WWlJNR04zVkd4R2JGa3pTblJUUm1zMFZVWk9hMVpWU2pCVU1WbDNZbXQwY0ZSclZuQmpia0poVFZjNWFtSldiSEZaYTNob1UyeHNWV0pGUmtWWGJVWnZWakZLVUZkcWJGSmhXRVp1V2xkb1EyRnVRak5TUjNNd1lWWkpOVTVXVmxkV1ZUVnlUMGhLYjFsVlRYbGhiVGcwVjBkYWVGbHFWbFppYlhoeFpFWkZkMDU1Y3pCaFZsSkpWRVpPTm1WRk1IcGxWWFJ2VFVaR1ZtRXdWVFJSVnpsSFVsaEtVRTFZUmxCU01WcFJVMVJDTmxsV2FIcFdWWEJ0WTBSU2JFMVVRazlPVjNSU1ZucFdUMU5XWTNaU1ZYUkZVMGhzYlU5VmJGaGtNMUl3WTFWc1lXTlhSakJTYTA1RVlVWmtjbUo2VmtSU00wSllUREkxUmsxWVl6SmxWM1JKVlZoQk1sVXhTbEppU0Zwd1VrVXdNRlpFVWt0VU1rWnNVVmQwYzFSV1VrMVVWV055V1RCYVRHSXpaRTlUVm05NVlraE9SR1JzVG5aUmFrWmFaVmRPVGxOVlNteGFiRXB1Wld0U2RVMHhSVGxRVTBselNXMWtjMkl5U21oaVJYUnNaVlZzYTBscWIybFpiVkpzV2xSVk1rNVVXWGRaTWxwcFRrUk9hazlYU1hsUFIwcHRUMVJvYkZsWFRtaGFiVVV5VGtSWmFXWlJQVDBpZlE9PSJ9 +status: {} \ No newline at end of file diff --git a/migrations/tables/app.yaml b/migrations/tables/app.yaml index af9aec57eb..84caf03014 100644 --- a/migrations/tables/app.yaml +++ b/migrations/tables/app.yaml @@ -85,3 +85,5 @@ spec: default: 0 constraints: notNull: true + - name: selected_channel_id + type: text diff --git a/pkg/airgap/airgap.go b/pkg/airgap/airgap.go index d0aa6f9135..5600e0c9e5 100644 --- a/pkg/airgap/airgap.go +++ b/pkg/airgap/airgap.go @@ -229,6 +229,7 @@ func CreateAppFromAirgap(opts CreateAirgapAppOpts) (finalError error) { AppSlug: opts.PendingApp.Slug, AppSequence: 0, AppVersionLabel: instParams.AppVersionLabel, + AppSelectedChannelID: opts.PendingApp.SelectedChannelID, SkipCompatibilityCheck: opts.SkipCompatibilityCheck, } diff --git a/pkg/airgap/types/types.go b/pkg/airgap/types/types.go index b6b8234808..6927d1e8ed 100644 --- a/pkg/airgap/types/types.go +++ b/pkg/airgap/types/types.go @@ -1,10 +1,11 @@ package types type PendingApp struct { - ID string - Slug string - Name string - LicenseData string + ID string + Slug string + Name string + LicenseData string + SelectedChannelID string } type InstallStatus struct { diff --git a/pkg/airgap/update.go b/pkg/airgap/update.go index 35986a9863..4f4d208dc6 100644 --- a/pkg/airgap/update.go +++ b/pkg/airgap/update.go @@ -203,6 +203,7 @@ func UpdateAppFromPath(a *apptypes.App, airgapRoot string, airgapBundlePath stri AppID: a.ID, AppSlug: a.Slug, AppSequence: appSequence, + AppSelectedChannelID: a.SelectedChannelID, SkipCompatibilityCheck: skipCompatibilityCheck, KotsKinds: beforeKotsKinds, } diff --git a/pkg/app/types/app.go b/pkg/app/types/app.go index f2682ae6cd..a933ee64d2 100644 --- a/pkg/app/types/app.go +++ b/pkg/app/types/app.go @@ -30,6 +30,7 @@ type App struct { InstallState string `json:"installState"` LastLicenseSync string `json:"lastLicenseSync"` ChannelChanged bool `json:"channelChanged"` + SelectedChannelID string `json:"selected_channel_id"` } func (a *App) GetID() string { @@ -44,6 +45,10 @@ func (a *App) GetCurrentSequence() int64 { return a.CurrentSequence } +func (a *App) GetSelectedChannelID() string { + return a.SelectedChannelID +} + func (a *App) GetIsAirgap() bool { return a.IsAirgap } diff --git a/pkg/automation/automation.go b/pkg/automation/automation.go index 3ce8d237d5..04b1e9f30b 100644 --- a/pkg/automation/automation.go +++ b/pkg/automation/automation.go @@ -203,8 +203,21 @@ func installLicenseSecret(clientset *kubernetes.Clientset, licenseSecret corev1. return errors.Wrap(err, "failed to verify license signature") } + instParams, err := kotsutil.GetInstallationParams(kotsadmtypes.KotsadmConfigMap) + if err != nil { + return errors.Wrap(err, "failed to get existing kotsadm config map") + } + + desiredAppName := strings.Replace(appSlug, "-", " ", 0) + upstreamURI := fmt.Sprintf("replicated://%s", appSlug) + + matchedChannelID, err := kotsutil.FindChannelIDInLicense(instParams.RequestedChannelSlug, verifiedLicense) + if err != nil { + return errors.Wrap(err, "failed to find requested channel in license") + } + if !kotsadm.IsAirgap() { - licenseData, err := replicatedapp.GetLatestLicense(verifiedLicense) + licenseData, err := replicatedapp.GetLatestLicense(verifiedLicense, matchedChannelID) if err != nil { return errors.Wrap(err, "failed to get latest license") } @@ -236,15 +249,7 @@ func installLicenseSecret(clientset *kubernetes.Clientset, licenseSecret corev1. } } - instParams, err := kotsutil.GetInstallationParams(kotsadmtypes.KotsadmConfigMap) - if err != nil { - return errors.Wrap(err, "failed to get existing kotsadm config map") - } - - desiredAppName := strings.Replace(appSlug, "-", " ", 0) - upstreamURI := fmt.Sprintf("replicated://%s", appSlug) - - a, err := store.GetStore().CreateApp(desiredAppName, upstreamURI, string(license), verifiedLicense.Spec.IsAirgapSupported, instParams.SkipImagePush, instParams.RegistryIsReadOnly) + a, err := store.GetStore().CreateApp(desiredAppName, matchedChannelID, upstreamURI, string(license), verifiedLicense.Spec.IsAirgapSupported, instParams.SkipImagePush, instParams.RegistryIsReadOnly) if err != nil { return errors.Wrap(err, "failed to create app record") } @@ -311,11 +316,12 @@ func installLicenseSecret(clientset *kubernetes.Clientset, licenseSecret corev1. } else if annotations["kots.io/airgap"] != "true" { createAppOpts := online.CreateOnlineAppOpts{ PendingApp: &onlinetypes.PendingApp{ - ID: a.ID, - Slug: a.Slug, - Name: a.Name, - LicenseData: string(license), - VersionLabel: instParams.AppVersionLabel, + ID: a.ID, + Slug: a.Slug, + Name: a.Name, + LicenseData: string(license), + VersionLabel: instParams.AppVersionLabel, + SelectedChannelID: a.SelectedChannelID, }, UpstreamURI: upstreamURI, IsAutomated: true, diff --git a/pkg/handlers/license.go b/pkg/handlers/license.go index 017369f643..a3658d6e44 100644 --- a/pkg/handlers/license.go +++ b/pkg/handlers/license.go @@ -272,10 +272,30 @@ func (h *Handler) UploadNewLicense(w http.ResponseWriter, r *http.Request) { return } + installationParams, err := kotsutil.GetInstallationParams(kotsadmtypes.KotsadmConfigMap) + if err != nil { + logger.Error(err) + uploadLicenseResponse.Error = err.Error() + JSON(w, http.StatusInternalServerError, uploadLicenseResponse) + return + } + + desiredAppName := strings.Replace(verifiedLicense.Spec.AppSlug, "-", " ", 0) + upstreamURI := fmt.Sprintf("replicated://%s", verifiedLicense.Spec.AppSlug) + + // verify that requested channel slug exists in the license + matchedChannelID, err := kotsutil.FindChannelIDInLicense(installationParams.RequestedChannelSlug, verifiedLicense) + if err != nil { + logger.Error(err) + uploadLicenseResponse.Error = "Your current license does not grant access to the channel you requested. Please generate a support bundle and contact support for assistance." + JSON(w, http.StatusBadRequest, uploadLicenseResponse) + return + } + if !kotsadm.IsAirgap() { // sync license logger.Info("syncing license with server to retrieve latest version") - licenseData, err := replicatedapp.GetLatestLicense(verifiedLicense) + licenseData, err := replicatedapp.GetLatestLicense(verifiedLicense, matchedChannelID) if err != nil { logger.Error(errors.Wrap(err, "failed to get latest license")) uploadLicenseResponse.Error = err.Error() @@ -323,18 +343,7 @@ func (h *Handler) UploadNewLicense(w http.ResponseWriter, r *http.Request) { } } - installationParams, err := kotsutil.GetInstallationParams(kotsadmtypes.KotsadmConfigMap) - if err != nil { - logger.Error(err) - uploadLicenseResponse.Error = err.Error() - JSON(w, http.StatusInternalServerError, uploadLicenseResponse) - return - } - - desiredAppName := strings.Replace(verifiedLicense.Spec.AppSlug, "-", " ", 0) - upstreamURI := fmt.Sprintf("replicated://%s", verifiedLicense.Spec.AppSlug) - - a, err := store.GetStore().CreateApp(desiredAppName, upstreamURI, licenseString, verifiedLicense.Spec.IsAirgapSupported, installationParams.SkipImagePush, installationParams.RegistryIsReadOnly) + a, err := store.GetStore().CreateApp(desiredAppName, matchedChannelID, upstreamURI, licenseString, verifiedLicense.Spec.IsAirgapSupported, installationParams.SkipImagePush, installationParams.RegistryIsReadOnly) if err != nil { logger.Error(err) uploadLicenseResponse.Error = err.Error() @@ -346,14 +355,16 @@ func (h *Handler) UploadNewLicense(w http.ResponseWriter, r *http.Request) { // complete the install online createAppOpts := online.CreateOnlineAppOpts{ PendingApp: &installationtypes.PendingApp{ - ID: a.ID, - Slug: a.Slug, - Name: a.Name, - LicenseData: uploadLicenseRequest.LicenseData, - VersionLabel: installationParams.AppVersionLabel, + ID: a.ID, + Slug: a.Slug, + Name: a.Name, + SelectedChannelID: a.SelectedChannelID, + LicenseData: uploadLicenseRequest.LicenseData, + VersionLabel: installationParams.AppVersionLabel, }, UpstreamURI: upstreamURI, } + kotsKinds, err := online.CreateAppFromOnline(createAppOpts) if err != nil { logger.Error(err) @@ -427,10 +438,11 @@ func (h *Handler) ResumeInstallOnline(w http.ResponseWriter, r *http.Request) { } pendingApp := installationtypes.PendingApp{ - ID: a.ID, - Slug: a.Slug, - Name: a.Name, - VersionLabel: installationParams.AppVersionLabel, + ID: a.ID, + Slug: a.Slug, + Name: a.Name, + VersionLabel: installationParams.AppVersionLabel, + SelectedChannelID: a.SelectedChannelID, } // the license data is left in the table @@ -457,6 +469,7 @@ func (h *Handler) ResumeInstallOnline(w http.ResponseWriter, r *http.Request) { PendingApp: &pendingApp, UpstreamURI: fmt.Sprintf("replicated://%s", kotsLicense.Spec.AppSlug), } + kotsKinds, err := online.CreateAppFromOnline(createAppOpts) if err != nil { logger.Error(err) diff --git a/pkg/handlers/update_checker_spec.go b/pkg/handlers/update_checker_spec.go index 5dbc2b163c..d281fbed7d 100644 --- a/pkg/handlers/update_checker_spec.go +++ b/pkg/handlers/update_checker_spec.go @@ -56,8 +56,16 @@ func (h *Handler) SetAutomaticUpdatesConfig(w http.ResponseWriter, r *http.Reque return } + licenseChan, err := kotsutil.FindChannelInLicense(foundApp.SelectedChannelID, license) + if err != nil { + updateCheckerSpecResponse.Error = "failed to find app channel id from license" + logger.Error(errors.Wrap(err, updateCheckerSpecResponse.Error)) + JSON(w, http.StatusInternalServerError, updateCheckerSpecResponse) + return + } + // Check if the deploy update configuration is valid based on app channel - if license.Spec.IsSemverRequired { + if licenseChan.IsSemverRequired { if configureAutomaticUpdatesRequest.AutoDeploy == apptypes.AutoDeploySequence { updateCheckerSpecResponse.Error = "automatic updates based on sequence type are not supported for semantic versioning apps" JSON(w, http.StatusUnprocessableEntity, updateCheckerSpecResponse) diff --git a/pkg/handlers/upgrade_service.go b/pkg/handlers/upgrade_service.go index 2fdf54228a..1dab0b6908 100644 --- a/pkg/handlers/upgrade_service.go +++ b/pkg/handlers/upgrade_service.go @@ -118,7 +118,10 @@ func canStartUpgradeService(a *apptypes.App, r StartUpgradeServiceRequest) (bool if err != nil { return false, "", errors.Wrap(err, "failed to find airgap metadata") } - if currLicense.Spec.ChannelID != airgap.Spec.ChannelID || r.ChannelID != airgap.Spec.ChannelID { + if _, err := kotsutil.FindChannelInLicense(airgap.Spec.ChannelID, currLicense); err != nil { + return false, "channel mismatch, channel not in license", nil + } + if r.ChannelID != airgap.Spec.ChannelID { return false, "channel mismatch", nil } isDeployable, nonDeployableCause, err := update.IsAirgapUpdateDeployable(a, airgap) @@ -131,7 +134,7 @@ func canStartUpgradeService(a *apptypes.App, r StartUpgradeServiceRequest) (bool return true, "", nil } - ll, err := replicatedapp.GetLatestLicense(currLicense) + ll, err := replicatedapp.GetLatestLicense(currLicense, a.SelectedChannelID) if err != nil { return false, "", errors.Wrap(err, "failed to get latest license") } diff --git a/pkg/handlers/upgrade_service_test.go b/pkg/handlers/upgrade_service_test.go index 97de2268b4..59aacf031c 100644 --- a/pkg/handlers/upgrade_service_test.go +++ b/pkg/handlers/upgrade_service_test.go @@ -86,6 +86,37 @@ spec: signature: eyJsaWNlbnNlRGF0YSI6ImV5SmhjR2xXWlhKemFXOXVJam9pYTI5MGN5NXBieTkyTVdKbGRHRXhJaXdpYTJsdVpDSTZJa3hwWTJWdWMyVWlMQ0p0WlhSaFpHRjBZU0k2ZXlKdVlXMWxJam9pZEdWemRHTjFjM1J2YldWeUluMHNJbk53WldNaU9uc2liR2xqWlc1elpVbEVJam9pTVhaMWMwOXZhM2hCVm5BeGRHdFNSM1Y1ZUc1R01qTlFTbU54SWl3aWJHbGpaVzV6WlZSNWNHVWlPaUp3Y205a0lpd2lZM1Z6ZEc5dFpYSk9ZVzFsSWpvaVZHVnpkQ0JEZFhOMGIyMWxjaUlzSW1Gd2NGTnNkV2NpT2lKdGVTMWhjSEFpTENKamFHRnVibVZzU1VRaU9pSXhkblZ6U1ZsYVRFRldlRTFITm5FM05qQlBTbTFTUzJvMWFUVWlMQ0pqYUdGdWJtVnNUbUZ0WlNJNklrMTVJRU5vWVc1dVpXd2lMQ0pzYVdObGJuTmxVMlZ4ZFdWdVkyVWlPamNzSW1WdVpIQnZhVzUwSWpvaWFIUjBjSE02THk5eVpYQnNhV05oZEdWa0xtRndjQ0lzSW1WdWRHbDBiR1Z0Wlc1MGN5STZleUppYjI5c1gyWnBaV3hrSWpwN0luUnBkR3hsSWpvaVFtOXZiQ0JHYVdWc1pDSXNJblpoYkhWbElqcDBjblZsTENKMllXeDFaVlI1Y0dVaU9pSkNiMjlzWldGdUluMHNJbVY0Y0dseVpYTmZZWFFpT25zaWRHbDBiR1VpT2lKRmVIQnBjbUYwYVc5dUlpd2laR1Z6WTNKcGNIUnBiMjRpT2lKTWFXTmxibk5sSUVWNGNHbHlZWFJwYjI0aUxDSjJZV3gxWlNJNklqSXdNekF0TURjdE1qZFVNREE2TURBNk1EQmFJaXdpZG1Gc2RXVlVlWEJsSWpvaVUzUnlhVzVuSW4wc0ltaHBaR1JsYmw5bWFXVnNaQ0k2ZXlKMGFYUnNaU0k2SWtocFpHUmxiaUJHYVdWc1pDSXNJblpoYkhWbElqb2lkR2hwY3lCcGN5QnpaV055WlhRaUxDSjJZV3gxWlZSNWNHVWlPaUpUZEhKcGJtY2lMQ0pwYzBocFpHUmxiaUk2ZEhKMVpYMHNJbWx1ZEY5bWFXVnNaQ0k2ZXlKMGFYUnNaU0k2SWtsdWRDQkdhV1ZzWkNJc0luWmhiSFZsSWpveE1qTXNJblpoYkhWbFZIbHdaU0k2SWtsdWRHVm5aWElpZlN3aWMzUnlhVzVuWDJacFpXeGtJanA3SW5ScGRHeGxJam9pVTNSeWFXNW5SbWxsYkdRaUxDSjJZV3gxWlNJNkluTnBibWRzWlNCc2FXNWxJSFJsZUhRaUxDSjJZV3gxWlZSNWNHVWlPaUpUZEhKcGJtY2lmU3dpZEdWNGRGOW1hV1ZzWkNJNmV5SjBhWFJzWlNJNklsUmxlSFFnUm1sbGJHUWlMQ0oyWVd4MVpTSTZJbTExYkhScFhHNXNhVzVsWEc1MFpYaDBJaXdpZG1Gc2RXVlVlWEJsSWpvaVZHVjRkQ0o5ZlN3aWFYTkJhWEpuWVhCVGRYQndiM0owWldRaU9uUnlkV1VzSW1selIybDBUM0J6VTNWd2NHOXlkR1ZrSWpwMGNuVmxMQ0pwYzFOdVlYQnphRzkwVTNWd2NHOXlkR1ZrSWpwMGNuVmxmWDA9IiwiaW5uZXJTaWduYXR1cmUiOiJleUpzYVdObGJuTmxVMmxuYm1GMGRYSmxJam9pYUhneE1XTXZUR1ozUTNoVE5YRmtRWEJGU1hGdVRrMU9NMHBLYTJzNFZHZFhSVVpzVDFKVlJ6UjJjR1YzZEZoV1YzbG1lamRZY0hBd1ExazJZamRyUVRSS2N6TklhR3d3YkZJMFdUQTFMemN2UVVkQ2FEZFZNSGczUkhaTVozUXpVM00wYm5GTFZTdFhXRXBTVHpKWVFVRnZSME4xZFRWR1RGcHJRVWhYY1RSUVFtMXphSFY2Y1ZsdmNucHhlbGhGWVZWVlpFUlVkVXhDTW1nNWFIZ3dXRWhQUmxwUk16bHVkbTlPUjJaT2R5OTRTVmRaZEhSUGRYZHZhMncyTVZsb1JVeFZlRmQxU1ZSRmMwTlVhM2xtTVRNd09IazVSbFJzWlRKeVYyZEVlSEZNYTBSUFNXVXlPRWwzUzJSQkwySXdWVUl5VEZGbVRWcHdWemwyUTNCSkwybHlWek5uYmpaeU5WWjNWMjB2U1dweWJtNDNSelJrVmpadVYzcFRkMGhQUTJSdWEwMTRNRXQ1VVVOa0wxQjFaWEpUYjNSdVEwOXRTMDEzWlRSTGJqaERkMU5YVVRRNGRURkRNbTFpV1VzeGRYTlpOM1YzUFQwaUxDSndkV0pzYVdOTFpYa2lPaUl0TFMwdExVSkZSMGxPSUZCVlFreEpReUJMUlZrdExTMHRMVnh1VFVsSlFrbHFRVTVDWjJ0eGFHdHBSemwzTUVKQlVVVkdRVUZQUTBGUk9FRk5TVWxDUTJkTFEwRlJSVUZ6TkhKdlVIcDFhV1JNZVhOMmIxWTJkemxhTkZ4dVdHRmliME5tWTJNeGFHZFZhQ3N3V1VkS2NFNURSVXhyTjBaTFF5OTJhemR6ZERsR05tY3dUMjlrU0VSbGVYZFJXa2hLZFU1TVpsUnNRbEJHUTJOaU5seHVObTlzVEZOeWNGQTRjbFUzU0d4SGJsRkVSMFJNYVhkS1EyaGtSRGRVVUdSM2FXdHBkMHRGY201aldqaEdaalZsU25vd2RETmlUWFpyVDJaVVluSkJiRnh1WWtGQ1kwbzVNVmxVT1hKdVVXOXFkVWN4UldKUVRqaEZWblI2TWxZNE5IZHViR2Q0TUhCd2JEVjRPSFpOYlhwcE1ISnVibEZVV1VGamJ6WnFhMnBJTTF4dVRuTlVkWE4xUzFkdlJGUjVNWE5yZGtSUk9IbEJZV0ptWTNNME4zWnNRazAwU0RGT1JFNHZSSFJhWWxZdllubDJia0o2YkM4eFZrVnpURmRqWlZWcFRGeHVSWEYxT0VkeWF5dFFVRGQyUkdSd2JFUjNjWFpQV2t4RmRYazNkamhuUm01U09WUlVSV3ByTlVvNWRuWlVTR2RtU25VemVubEVPR2xLWTBSRE5YcHFPVnh1YjFGSlJFRlJRVUpjYmkwdExTMHRSVTVFSUZCVlFreEpReUJMUlZrdExTMHRMVnh1SWl3aWEyVjVVMmxuYm1GMGRYSmxJam9pWlhsS2VtRlhaSFZaV0ZJeFkyMVZhVTlwU2pCUldIQjJXVE5LVms1NmFGaFNSMlJzVVRKb2NtTklXa1ZVVlRsRldqQktXVTFGUmtaVFJFNUZVMGhLYkUxclRUTkxNSEJFVkROR2VGTnROVVJVVlRWVlltMDFiVnBGUm5sWldIQjZaRVJqTVZaSGFFeFBXRUpVVWtacmRrd3diek5aTUZaSlVteFdWRXd5T1VoV1JXeHNWa1ZPTUZSSE1WWlJNR04zVkd4R2JGa3pTblJUUm1zMFZVWk9hMVpWU2pCVU1WbDNZbXQwY0ZSclZuQmpia0poVFZjNWFtSldiSEZaYTNob1UyeHNWV0pGUmtWWGJVWnZWakZLVUZkcWJGSmhXRVp1V2xkb1EyRnVRak5TUjNNd1lWWkpOVTVXVmxkV1ZUVnlUMGhLYjFsVlRYbGhiVGcwVjBkYWVGbHFWbFppYlhoeFpFWkZkMDU1Y3pCaFZsSkpWRVpPTm1WRk1IcGxWWFJ2VFVaR1ZtRXdWVFJSVnpsSFVsaEtVRTFZUmxCU01WcFJVMVJDTmxsV2FIcFdWWEJ0WTBSU2JFMVVRazlPVjNSU1ZucFdUMU5XWTNaU1ZYUkZVMGhzYlU5VmJGaGtNMUl3WTFWc1lXTlhSakJTYTA1RVlVWmtjbUo2VmtSU00wSllUREkxUmsxWVl6SmxWM1JKVlZoQk1sVXhTbEppU0Zwd1VrVXdNRlpFVWt0VU1rWnNVVmQwYzFSV1VrMVVWV055V1RCYVRHSXpaRTlUVm05NVlraE9SR1JzVG5aUmFrWmFaVmRPVGxOVlNteGFiRXB1Wld0U2RVMHhSVGxRVTBselNXMWtjMkl5U21oaVJYUnNaVlZzYTBscWIybFpiVkpzV2xSVk1rNVVXWGRaTWxwcFRrUk9hazlYU1hsUFIwcHRUMVJvYkZsWFRtaGFiVVV5VGtSWmFXWlJQVDBpZlE9PSJ9 `, mockServer.URL) + testMultiChannelLicense := fmt.Sprintf(`apiVersion: kots.io/v1beta1 +kind: License +metadata: + name: testcustomer +spec: + appSlug: my-app + channelID: 1vusIYZLAVxMG6q760OJmRKj5i5 + channelName: My Channel + customerName: Test Customer + endpoint: %s + channels: + - channelId: 1vusIYZLAVxMG6q760OJmRKj5i5 + channelName: My Channel + channelSlug: my-channel + isDefault: true + isSemverRequired: false + entitlements: + expires_at: + description: License Expiration + title: Expiration + value: "2030-07-27T00:00:00Z" + valueType: String + isAirgapSupported: true + isGitOpsSupported: true + isSnapshotSupported: true + licenseID: 1vusOokxAVp1tkRGuyxnF23PJcq + licenseSequence: 7 + licenseType: prod + signature: eyJsaWNlbnNlRGF0YSI6ImV5SmhjR2xXWlhKemFXOXVJam9pYTI5MGN5NXBieTkyTVdKbGRHRXhJaXdpYTJsdVpDSTZJa3hwWTJWdWMyVWlMQ0p0WlhSaFpHRjBZU0k2ZXlKdVlXMWxJam9pZEdWemRHTjFjM1J2YldWeUluMHNJbk53WldNaU9uc2liR2xqWlc1elpVbEVJam9pTVhaMWMwOXZhM2hCVm5BeGRHdFNSM1Y1ZUc1R01qTlFTbU54SWl3aWJHbGpaVzV6WlZSNWNHVWlPaUp3Y205a0lpd2lZM1Z6ZEc5dFpYSk9ZVzFsSWpvaVZHVnpkQ0JEZFhOMGIyMWxjaUlzSW1Gd2NGTnNkV2NpT2lKdGVTMWhjSEFpTENKamFHRnVibVZzU1VRaU9pSXhkblZ6U1ZsYVRFRldlRTFITm5FM05qQlBTbTFTUzJvMWFUVWlMQ0pqYUdGdWJtVnNUbUZ0WlNJNklrMTVJRU5vWVc1dVpXd2lMQ0pzYVdObGJuTmxVMlZ4ZFdWdVkyVWlPamNzSW1WdVpIQnZhVzUwSWpvaWFIUjBjSE02THk5eVpYQnNhV05oZEdWa0xtRndjQ0lzSW1WdWRHbDBiR1Z0Wlc1MGN5STZleUppYjI5c1gyWnBaV3hrSWpwN0luUnBkR3hsSWpvaVFtOXZiQ0JHYVdWc1pDSXNJblpoYkhWbElqcDBjblZsTENKMllXeDFaVlI1Y0dVaU9pSkNiMjlzWldGdUluMHNJbVY0Y0dseVpYTmZZWFFpT25zaWRHbDBiR1VpT2lKRmVIQnBjbUYwYVc5dUlpd2laR1Z6WTNKcGNIUnBiMjRpT2lKTWFXTmxibk5sSUVWNGNHbHlZWFJwYjI0aUxDSjJZV3gxWlNJNklqSXdNekF0TURjdE1qZFVNREE2TURBNk1EQmFJaXdpZG1Gc2RXVlVlWEJsSWpvaVUzUnlhVzVuSW4wc0ltaHBaR1JsYmw5bWFXVnNaQ0k2ZXlKMGFYUnNaU0k2SWtocFpHUmxiaUJHYVdWc1pDSXNJblpoYkhWbElqb2lkR2hwY3lCcGN5QnpaV055WlhRaUxDSjJZV3gxWlZSNWNHVWlPaUpUZEhKcGJtY2lMQ0pwYzBocFpHUmxiaUk2ZEhKMVpYMHNJbWx1ZEY5bWFXVnNaQ0k2ZXlKMGFYUnNaU0k2SWtsdWRDQkdhV1ZzWkNJc0luWmhiSFZsSWpveE1qTXNJblpoYkhWbFZIbHdaU0k2SWtsdWRHVm5aWElpZlN3aWMzUnlhVzVuWDJacFpXeGtJanA3SW5ScGRHeGxJam9pVTNSeWFXNW5SbWxsYkdRaUxDSjJZV3gxWlNJNkluTnBibWRzWlNCc2FXNWxJSFJsZUhRaUxDSjJZV3gxWlZSNWNHVWlPaUpUZEhKcGJtY2lmU3dpZEdWNGRGOW1hV1ZzWkNJNmV5SjBhWFJzWlNJNklsUmxlSFFnUm1sbGJHUWlMQ0oyWVd4MVpTSTZJbTExYkhScFhHNXNhVzVsWEc1MFpYaDBJaXdpZG1Gc2RXVlVlWEJsSWpvaVZHVjRkQ0o5ZlN3aWFYTkJhWEpuWVhCVGRYQndiM0owWldRaU9uUnlkV1VzSW1selIybDBUM0J6VTNWd2NHOXlkR1ZrSWpwMGNuVmxMQ0pwYzFOdVlYQnphRzkwVTNWd2NHOXlkR1ZrSWpwMGNuVmxmWDA9IiwiaW5uZXJTaWduYXR1cmUiOiJleUpzYVdObGJuTmxVMmxuYm1GMGRYSmxJam9pYUhneE1XTXZUR1ozUTNoVE5YRmtRWEJGU1hGdVRrMU9NMHBLYTJzNFZHZFhSVVpzVDFKVlJ6UjJjR1YzZEZoV1YzbG1lamRZY0hBd1ExazJZamRyUVRSS2N6TklhR3d3YkZJMFdUQTFMemN2UVVkQ2FEZFZNSGczUkhaTVozUXpVM00wYm5GTFZTdFhXRXBTVHpKWVFVRnZSME4xZFRWR1RGcHJRVWhYY1RSUVFtMXphSFY2Y1ZsdmNucHhlbGhGWVZWVlpFUlVkVXhDTW1nNWFIZ3dXRWhQUmxwUk16bHVkbTlPUjJaT2R5OTRTVmRaZEhSUGRYZHZhMncyTVZsb1JVeFZlRmQxU1ZSRmMwTlVhM2xtTVRNd09IazVSbFJzWlRKeVYyZEVlSEZNYTBSUFNXVXlPRWwzUzJSQkwySXdWVUl5VEZGbVRWcHdWemwyUTNCSkwybHlWek5uYmpaeU5WWjNWMjB2U1dweWJtNDNSelJrVmpadVYzcFRkMGhQUTJSdWEwMTRNRXQ1VVVOa0wxQjFaWEpUYjNSdVEwOXRTMDEzWlRSTGJqaERkMU5YVVRRNGRURkRNbTFpV1VzeGRYTlpOM1YzUFQwaUxDSndkV0pzYVdOTFpYa2lPaUl0TFMwdExVSkZSMGxPSUZCVlFreEpReUJMUlZrdExTMHRMVnh1VFVsSlFrbHFRVTVDWjJ0eGFHdHBSemwzTUVKQlVVVkdRVUZQUTBGUk9FRk5TVWxDUTJkTFEwRlJSVUZ6TkhKdlVIcDFhV1JNZVhOMmIxWTJkemxhTkZ4dVdHRmliME5tWTJNeGFHZFZhQ3N3V1VkS2NFNURSVXhyTjBaTFF5OTJhemR6ZERsR05tY3dUMjlrU0VSbGVYZFJXa2hLZFU1TVpsUnNRbEJHUTJOaU5seHVObTlzVEZOeWNGQTRjbFUzU0d4SGJsRkVSMFJNYVhkS1EyaGtSRGRVVUdSM2FXdHBkMHRGY201aldqaEdaalZsU25vd2RETmlUWFpyVDJaVVluSkJiRnh1WWtGQ1kwbzVNVmxVT1hKdVVXOXFkVWN4UldKUVRqaEZWblI2TWxZNE5IZHViR2Q0TUhCd2JEVjRPSFpOYlhwcE1ISnVibEZVV1VGamJ6WnFhMnBJTTF4dVRuTlVkWE4xUzFkdlJGUjVNWE5yZGtSUk9IbEJZV0ptWTNNME4zWnNRazAwU0RGT1JFNHZSSFJhWWxZdllubDJia0o2YkM4eFZrVnpURmRqWlZWcFRGeHVSWEYxT0VkeWF5dFFVRGQyUkdSd2JFUjNjWFpQV2t4RmRYazNkamhuUm01U09WUlVSV3ByTlVvNWRuWlVTR2RtU25VemVubEVPR2xLWTBSRE5YcHFPVnh1YjFGSlJFRlJRVUpjYmkwdExTMHRSVTVFSUZCVlFreEpReUJMUlZrdExTMHRMVnh1SWl3aWEyVjVVMmxuYm1GMGRYSmxJam9pWlhsS2VtRlhaSFZaV0ZJeFkyMVZhVTlwU2pCUldIQjJXVE5LVms1NmFGaFNSMlJzVVRKb2NtTklXa1ZVVlRsRldqQktXVTFGUmtaVFJFNUZVMGhLYkUxclRUTkxNSEJFVkROR2VGTnROVVJVVlRWVlltMDFiVnBGUm5sWldIQjZaRVJqTVZaSGFFeFBXRUpVVWtacmRrd3diek5aTUZaSlVteFdWRXd5T1VoV1JXeHNWa1ZPTUZSSE1WWlJNR04zVkd4R2JGa3pTblJUUm1zMFZVWk9hMVpWU2pCVU1WbDNZbXQwY0ZSclZuQmpia0poVFZjNWFtSldiSEZaYTNob1UyeHNWV0pGUmtWWGJVWnZWakZLVUZkcWJGSmhXRVp1V2xkb1EyRnVRak5TUjNNd1lWWkpOVTVXVmxkV1ZUVnlUMGhLYjFsVlRYbGhiVGcwVjBkYWVGbHFWbFppYlhoeFpFWkZkMDU1Y3pCaFZsSkpWRVpPTm1WRk1IcGxWWFJ2VFVaR1ZtRXdWVFJSVnpsSFVsaEtVRTFZUmxCU01WcFJVMVJDTmxsV2FIcFdWWEJ0WTBSU2JFMVVRazlPVjNSU1ZucFdUMU5XWTNaU1ZYUkZVMGhzYlU5VmJGaGtNMUl3WTFWc1lXTlhSakJTYTA1RVlVWmtjbUo2VmtSU00wSllUREkxUmsxWVl6SmxWM1JKVlZoQk1sVXhTbEppU0Zwd1VrVXdNRlpFVWt0VU1rWnNVVmQwYzFSV1VrMVVWV055V1RCYVRHSXpaRTlUVm05NVlraE9SR1JzVG5aUmFrWmFaVmRPVGxOVlNteGFiRXB1Wld0U2RVMHhSVGxRVTBselNXMWtjMkl5U21oaVJYUnNaVlZzYTBscWIybFpiVkpzV2xSVk1rNVVXWGRaTWxwcFRrUk9hazlYU1hsUFIwcHRUMVJvYkZsWFRtaGFiVVV5VGtSWmFXWlJQVDBpZlE9PSJ9 +`, mockServer.URL) + onlineApp := &apptypes.App{ ID: "app-id", Slug: "app-slug", @@ -104,6 +135,15 @@ spec: License: testLicense, } + airgapAppMultiChannel := &apptypes.App{ + ID: "app-id", + Slug: "app-slug", + Name: "app-name", + IsAirgap: true, + IsGitOps: false, + License: testMultiChannelLicense, + } + type args struct { app *apptypes.App request handlers.StartUpgradeServiceRequest @@ -213,6 +253,60 @@ spec: RegistryNamespace: "namespace", RegistryIsReadOnly: false, + ReportingInfo: reporting.GetReportingInfo(airgapApp.ID), + }, + }, + { + name: "airgap with multi-channel license", + args: args{ + app: airgapAppMultiChannel, + request: handlers.StartUpgradeServiceRequest{ + VersionLabel: "1.0.0", + UpdateCursor: "1", + ChannelID: "channel-id", + }, + }, + mockStoreExpectations: func() { + mockStore.EXPECT().GetRegistryDetailsForApp(airgapAppMultiChannel.ID).Return(registrytypes.RegistrySettings{ + Hostname: "hostname", + Username: "username", + Password: "password", + Namespace: "namespace", + IsReadOnly: false, + }, nil) + mockStore.EXPECT().GetAppVersionBaseArchive(airgapAppMultiChannel.ID, "1.0.0").Return("base-archive", int64(1), nil) + mockStore.EXPECT().GetNextAppSequence(airgapAppMultiChannel.ID).Return(int64(2), nil) + }, + wantParams: &upgradeservicetypes.UpgradeServiceParams{ + Port: "", // port is random, we just check it's not empty + + AppID: airgapAppMultiChannel.ID, + AppSlug: airgapAppMultiChannel.Slug, + AppName: airgapAppMultiChannel.Name, + AppIsAirgap: airgapAppMultiChannel.IsAirgap, + AppIsGitOps: airgapAppMultiChannel.IsGitOps, + AppLicense: airgapAppMultiChannel.License, + AppArchive: "base-archive", + + Source: "Airgap Update", + BaseSequence: 1, + NextSequence: 2, + + UpdateVersionLabel: "1.0.0", + UpdateCursor: "1", + UpdateChannelID: "channel-id", + UpdateECVersion: "airgap-update-ec-version", + UpdateKOTSBin: "", // tmp file name is random, we just check it's not empty + UpdateAirgapBundle: updateAirgapBundle, + + CurrentECVersion: "current-ec-version", + + RegistryEndpoint: "hostname", + RegistryUsername: "username", + RegistryPassword: "password", + RegistryNamespace: "namespace", + RegistryIsReadOnly: false, + ReportingInfo: reporting.GetReportingInfo(airgapApp.ID), }, }, diff --git a/pkg/kotsadm/objects/configmaps_objects.go b/pkg/kotsadm/objects/configmaps_objects.go index 70f28ccabd..2082570f6b 100644 --- a/pkg/kotsadm/objects/configmaps_objects.go +++ b/pkg/kotsadm/objects/configmaps_objects.go @@ -25,7 +25,9 @@ func KotsadmConfigMap(deployOptions types.DeployOptions) *corev1.ConfigMap { "wait-duration": fmt.Sprintf("%v", deployOptions.Timeout), "with-minio": fmt.Sprintf("%v", deployOptions.IncludeMinio), "app-version-label": deployOptions.AppVersionLabel, + "requested-channel-slug": deployOptions.RequestedChannelSlug, } + if kotsadmversion.KotsadmPullSecret(deployOptions.Namespace, deployOptions.RegistryConfig) != nil { data["kotsadm-registry"] = kotsadmversion.KotsadmRegistry(deployOptions.RegistryConfig) } diff --git a/pkg/kotsadm/types/deployoptions.go b/pkg/kotsadm/types/deployoptions.go index 5db3215c06..14d5be2404 100644 --- a/pkg/kotsadm/types/deployoptions.go +++ b/pkg/kotsadm/types/deployoptions.go @@ -56,6 +56,7 @@ type DeployOptions struct { IsMinimalRBAC bool AdditionalNamespaces []string IsGKEAutopilot bool + RequestedChannelSlug string IdentityConfig kotsv1beta1.IdentityConfig IngressConfig kotsv1beta1.IngressConfig diff --git a/pkg/kotsadmlicense/license.go b/pkg/kotsadmlicense/license.go index 78a2ec83b8..74fb9532f4 100644 --- a/pkg/kotsadmlicense/license.go +++ b/pkg/kotsadmlicense/license.go @@ -46,7 +46,7 @@ func Sync(a *apptypes.App, licenseString string, failOnVersionCreate bool) (*kot updatedLicense = verifiedLicense } else { // get from the api - licenseData, err := replicatedapp.GetLatestLicense(currentLicense) + licenseData, err := replicatedapp.GetLatestLicense(currentLicense, a.SelectedChannelID) if err != nil { return nil, false, errors.Wrap(err, "failed to get latest license") } @@ -120,7 +120,7 @@ func Change(a *apptypes.App, newLicenseString string) (*kotsv1beta1.License, err } if !a.IsAirgap { - licenseData, err := replicatedapp.GetLatestLicense(newLicense) + licenseData, err := replicatedapp.GetLatestLicense(newLicense, a.SelectedChannelID) if err != nil { return nil, errors.Wrap(err, "failed to get latest license") } diff --git a/pkg/kotsadmupstream/upstream.go b/pkg/kotsadmupstream/upstream.go index 525dd8f7a5..1d59d246d0 100644 --- a/pkg/kotsadmupstream/upstream.go +++ b/pkg/kotsadmupstream/upstream.go @@ -231,6 +231,7 @@ func DownloadUpdate(appID string, update types.Update, skipPreflights bool, skip RewriteImageOptions: registrySettings, SkipCompatibilityCheck: skipCompatibilityCheck, KotsKinds: beforeKotsKinds, + AppSelectedChannelID: a.SelectedChannelID, } _, err = pull.Pull(fmt.Sprintf("replicated://%s", beforeKotsKinds.License.Spec.AppSlug), pullOptions) diff --git a/pkg/kotsutil/kots.go b/pkg/kotsutil/kots.go index 242bc0e54f..1252f62b57 100644 --- a/pkg/kotsutil/kots.go +++ b/pkg/kotsutil/kots.go @@ -1139,6 +1139,7 @@ type InstallationParams struct { WaitDuration time.Duration WithMinio bool AppVersionLabel string + RequestedChannelSlug string } func GetInstallationParams(configMapName string) (InstallationParams, error) { @@ -1174,6 +1175,7 @@ func GetInstallationParams(configMapName string) (InstallationParams, error) { autoConfig.WaitDuration, _ = time.ParseDuration(kotsadmConfigMap.Data["wait-duration"]) autoConfig.WithMinio, _ = strconv.ParseBool(kotsadmConfigMap.Data["with-minio"]) autoConfig.AppVersionLabel = kotsadmConfigMap.Data["app-version-label"] + autoConfig.RequestedChannelSlug = kotsadmConfigMap.Data["requested-channel-slug"] if enableImageDeletion, ok := kotsadmConfigMap.Data["enable-image-deletion"]; ok { autoConfig.EnableImageDeletion, _ = strconv.ParseBool(enableImageDeletion) @@ -1598,3 +1600,66 @@ func GetECVersionFromAirgapBundle(airgapBundle string) (string, error) { } return ecVersion, nil } + +func FindChannelIDInLicense(requestedSlug string, license *kotsv1beta1.License) (string, error) { + matchedChannelID := "" + if requestedSlug != "" { + // if we do not have a Channels array or its empty, default to using the top level fields for backwards compatibility + if len(license.Spec.Channels) == 0 { + logger.Debug("not a multi-channel license, using top level license channel id") + matchedChannelID = license.Spec.ChannelID + } else { + for _, channel := range license.Spec.Channels { + if channel.ChannelSlug == requestedSlug { + matchedChannelID = channel.ChannelID + break + } + } + if matchedChannelID == "" { + return "", errors.New("requested install channel slug not found in license channels") + } + } + } else { // this is an install from before the channel slug was added to the configmap + logger.Debug("requested channel slug not found in configmap, using top level channel id from license") + matchedChannelID = license.Spec.ChannelID + } + return matchedChannelID, nil +} + +func FindChannelInLicense(channelID string, license *kotsv1beta1.License) (*kotsv1beta1.Channel, error) { + if channelID == "" { + return nil, errors.New("channelID is required") + } + if len(license.Spec.Channels) == 0 { + if license.Spec.ChannelID != channelID { + return nil, errors.New("channel not found in non-multi channel license") + } + // this is an install from before multi channel support, so emulate it using the top level info + return &kotsv1beta1.Channel{ + ChannelID: license.Spec.ChannelID, + ChannelName: license.Spec.ChannelName, + IsDefault: true, + IsSemverRequired: license.Spec.IsSemverRequired, + }, nil + } + + for _, channel := range license.Spec.Channels { + if channel.ChannelID == channelID { + return &channel, nil + } + } + + logger.Warnf("channel id '%s' not found in multi channel license with sequence", channelID, license.Spec.LicenseSequence) + return nil, errors.New("channel not found in multi channel format license") +} + +func GetDefaultChannelIDFromLicense(license *kotsv1beta1.License) string { + for _, channel := range license.Spec.Channels { + if channel.IsDefault { + return channel.ChannelID + } + } + // either this isn't a multi channel license or the default channel is not set + // either way we should fall back to the top level channel id for backwards compatibility + return license.Spec.ChannelID +} diff --git a/pkg/kotsutil/kots_test.go b/pkg/kotsutil/kots_test.go index 419565549d..5b90ec047c 100644 --- a/pkg/kotsutil/kots_test.go +++ b/pkg/kotsutil/kots_test.go @@ -1057,3 +1057,201 @@ status: {} }) } } + +func TestFindChannelIDInLicense(t *testing.T) { + tests := []struct { + name string + license *kotsv1beta1.License + requestedSlug string + expectedChannelID string + expectError bool + }{ + { + name: "Found slug", + license: &kotsv1beta1.License{ + Spec: kotsv1beta1.LicenseSpec{ + Channels: []kotsv1beta1.Channel{ + { + ChannelID: "channel-id-1", + ChannelSlug: "slug-1", + IsDefault: true, + }, + { + ChannelID: "channel-id-2", + ChannelSlug: "slug-2", + IsDefault: false, + }, + }, + }, + }, + requestedSlug: "slug-2", + expectedChannelID: "channel-id-2", + expectError: false, + }, + { + name: "Empty requested slug", + license: &kotsv1beta1.License{ + Spec: kotsv1beta1.LicenseSpec{ + ChannelID: "top-level-channel-id", + Channels: []kotsv1beta1.Channel{ + { + ChannelID: "channel-id-1", + ChannelSlug: "channel-slug-1", + }, + { + ChannelID: "channel-id-2", + ChannelSlug: "channel-slug-2", + }, + }, + }, + }, + requestedSlug: "", + expectedChannelID: "top-level-channel-id", + expectError: false, + }, + { + name: "Legacy license with no / empty channels", + license: &kotsv1beta1.License{ + Spec: kotsv1beta1.LicenseSpec{ + ChannelID: "test-channel-id", + }, + }, + requestedSlug: "test-slug", + expectedChannelID: "test-channel-id", + expectError: false, + }, + { + name: "No matching slug should error", + license: &kotsv1beta1.License{ + Spec: kotsv1beta1.LicenseSpec{ + ChannelID: "top-level-channel-id", + Channels: []kotsv1beta1.Channel{ + { + ChannelID: "channel-id-1", + ChannelSlug: "channel-slug-1", + }, + { + ChannelID: "channel-id-2", + ChannelSlug: "channel-slug-2", + }, + }, + }, + }, + requestedSlug: "non-existent-slug", + expectedChannelID: "", + expectError: true, + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + channelID, err := kotsutil.FindChannelIDInLicense(tt.requestedSlug, tt.license) + + if tt.expectError { + require.Error(t, err) + } else { + require.NoError(t, err) + require.Equal(t, tt.expectedChannelID, channelID) + } + }) + } +} + +func TestFindChannelInLicense(t *testing.T) { + tests := []struct { + name string + license *kotsv1beta1.License + requestedID string + expectedChannel *kotsv1beta1.Channel + expectError bool + }{ + { + name: "Find multi channel license", + license: &kotsv1beta1.License{ + Spec: kotsv1beta1.LicenseSpec{ + Channels: []kotsv1beta1.Channel{ + { + ChannelID: "channel-id-1", + ChannelName: "name-1", + IsDefault: true, + IsSemverRequired: true, + }, + { + ChannelID: "channel-id-2", + ChannelName: "name-2", + IsDefault: false, + IsSemverRequired: false, + }, + }, + }, + }, + requestedID: "channel-id-2", + expectedChannel: &kotsv1beta1.Channel{ + ChannelID: "channel-id-2", + ChannelName: "name-2", + IsDefault: false, + IsSemverRequired: false, + }, + expectError: false, + }, + { + name: "Legacy license with no / empty channels", + license: &kotsv1beta1.License{ + Spec: kotsv1beta1.LicenseSpec{ + ChannelID: "test-channel-id", + ChannelName: "test-channel-name", + IsSemverRequired: true, + }, + }, + requestedID: "test-channel-id", + expectedChannel: &kotsv1beta1.Channel{ + ChannelID: "test-channel-id", + ChannelName: "test-channel-name", + IsSemverRequired: true, + IsDefault: true, + }, + expectError: false, + }, + { + name: "No matching ID should error", + license: &kotsv1beta1.License{ + Spec: kotsv1beta1.LicenseSpec{ + ChannelID: "channel-id-1", + ChannelName: "name-1", + IsSemverRequired: true, + Channels: []kotsv1beta1.Channel{ + { + ChannelID: "channel-id-1", + ChannelName: "name-1", + IsDefault: true, + IsSemverRequired: true, + }, + { + ChannelID: "channel-id-2", + ChannelName: "name-2", + IsDefault: false, + IsSemverRequired: false, + }, + }, + }, + }, + requestedID: "non-existent-id", + expectedChannel: nil, + expectError: true, + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + channel, err := kotsutil.FindChannelInLicense(tt.requestedID, tt.license) + + if tt.expectError { + require.Error(t, err) + } else { + require.NoError(t, err) + require.NotNil(t, channel) + require.Equal(t, tt.expectedChannel, channel) + } + }) + } +} diff --git a/pkg/license/multichannel.go b/pkg/license/multichannel.go new file mode 100644 index 0000000000..db7f58d444 --- /dev/null +++ b/pkg/license/multichannel.go @@ -0,0 +1,60 @@ +package license + +import ( + "github.com/pkg/errors" + "github.com/replicatedhq/kots/pkg/logger" + "github.com/replicatedhq/kots/pkg/replicatedapp" + kotsv1beta1 "github.com/replicatedhq/kotskinds/apis/kots/v1beta1" +) + +func isSlugInLicenseChannels(slug string, license *kotsv1beta1.License) bool { + for _, channel := range license.Spec.Channels { + if channel.ChannelSlug == slug { + return true + } + } + return false +} + +func isMultiChannelLicense(license *kotsv1beta1.License) bool { + if license == nil { + return false + } + // whether a license is multi-channel is determined by the presence of channels in the license + // if there are no channels, it is not multi-channel - and was generated before channels + // were introduced. + return len(license.Spec.Channels) > 0 +} + +func canInstallFromChannel(slug string, license *kotsv1beta1.License) bool { + if !isMultiChannelLicense(license) { + return true + } + return isSlugInLicenseChannels(slug, license) +} + +// VerifyAndUpdateLicense will update (if not airgapped), verify that the request channel slug is present, and return the possibly updated license. +// Note that this is a noop if the license passed in is nil. +func VerifyAndUpdateLicense(log *logger.CLILogger, license *kotsv1beta1.License, preferredChannelSlug string, isAirgap bool) (*kotsv1beta1.License, error) { + if license == nil { + return nil, nil + } + if isAirgap { + if !canInstallFromChannel(preferredChannelSlug, license) { + return nil, errors.New("requested channel not found in supplied license") + } + return license, nil + } + log.ActionWithSpinner("Checking for license update") + // we fetch the latest license to ensure that the license is up to date, before proceeding + updatedLicense, err := replicatedapp.GetLatestLicense(license, "") + if err != nil { + log.FinishSpinnerWithError() + return nil, errors.Wrap(err, "failed to get latest license") + } + log.FinishSpinner() + if canInstallFromChannel(preferredChannelSlug, updatedLicense.License) { + return updatedLicense.License, nil + } + return nil, errors.New("requested channel not found in latest license") +} diff --git a/pkg/online/online.go b/pkg/online/online.go index 8ba1ae7ba4..74a8ce6bbf 100644 --- a/pkg/online/online.go +++ b/pkg/online/online.go @@ -155,6 +155,7 @@ func CreateAppFromOnline(opts CreateOnlineAppOpts) (_ *kotsutil.KotsKinds, final AppSlug: opts.PendingApp.Slug, AppSequence: 0, AppVersionLabel: opts.PendingApp.VersionLabel, + AppSelectedChannelID: opts.PendingApp.SelectedChannelID, ReportingInfo: reporting.GetReportingInfo(opts.PendingApp.ID), SkipCompatibilityCheck: opts.SkipCompatibilityCheck, } diff --git a/pkg/online/types/types.go b/pkg/online/types/types.go index 992a0cab12..3858abd4dc 100644 --- a/pkg/online/types/types.go +++ b/pkg/online/types/types.go @@ -1,11 +1,12 @@ package types type PendingApp struct { - ID string - Slug string - Name string - LicenseData string - VersionLabel string + ID string + Slug string + Name string + LicenseData string + VersionLabel string + SelectedChannelID string } type InstallStatus struct { diff --git a/pkg/pull/pull.go b/pkg/pull/pull.go index 65020d7140..d35133e034 100644 --- a/pkg/pull/pull.go +++ b/pkg/pull/pull.go @@ -68,6 +68,7 @@ type PullOptions struct { AppSlug string AppSequence int64 AppVersionLabel string + AppSelectedChannelID string IsGitOps bool StorageClassName string HTTPProxyEnvValue string @@ -131,6 +132,7 @@ func Pull(upstreamURI string, pullOptions PullOptions) (string, error) { AppSlug: pullOptions.AppSlug, AppSequence: pullOptions.AppSequence, AppVersionLabel: pullOptions.AppVersionLabel, + AppSelectedChannelID: pullOptions.AppSelectedChannelID, LocalRegistry: pullOptions.RewriteImageOptions, ReportingInfo: pullOptions.ReportingInfo, SkipCompatibilityCheck: pullOptions.SkipCompatibilityCheck, @@ -236,10 +238,10 @@ func Pull(upstreamURI string, pullOptions PullOptions) (string, error) { logger.Infof("Expecting to install version %s but airgap bundle version is %s.", fetchOptions.AppVersionLabel, airgap.Spec.VersionLabel) } - if fetchOptions.License.Spec.ChannelID != airgap.Spec.ChannelID { + if _, err = kotsutil.FindChannelInLicense(airgap.Spec.ChannelID, fetchOptions.License); err != nil { return "", util.ActionableError{ NoRetry: true, // if this is airgap upload, make sure to free up tmp space - Message: fmt.Sprintf("License (%s) and airgap bundle (%s) channels do not match.", fetchOptions.License.Spec.ChannelName, airgap.Spec.ChannelName), + Message: fmt.Sprintf("Requested channel (%s) not found in license.", airgap.Spec.ChannelName), } } diff --git a/pkg/registry/registry.go b/pkg/registry/registry.go index c7f28c14b6..1a1f76519f 100644 --- a/pkg/registry/registry.go +++ b/pkg/registry/registry.go @@ -145,11 +145,12 @@ func RewriteImages(appID string, sequence int64, hostname string, username strin Password: password, IsReadOnly: isReadOnly, }, - AppID: a.ID, - AppSlug: a.Slug, - IsGitOps: a.IsGitOps, - AppSequence: nextAppSequence, - ReportingInfo: reporting.GetReportingInfo(a.ID), + AppID: a.ID, + AppSlug: a.Slug, + AppSelectedChannelID: a.SelectedChannelID, + IsGitOps: a.IsGitOps, + AppSequence: nextAppSequence, + ReportingInfo: reporting.GetReportingInfo(a.ID), // TODO: pass in as arguments if this is ever called from CLI HTTPProxyEnvValue: os.Getenv("HTTP_PROXY"), diff --git a/pkg/render/render.go b/pkg/render/render.go index a5bb8cc3d4..7551dbea00 100644 --- a/pkg/render/render.go +++ b/pkg/render/render.go @@ -121,31 +121,39 @@ func RenderDir(opts types.RenderDirOptions) error { downstreamNames = append(downstreamNames, d.Name) } + // typically we want the selected channel id on the App obj + // but in the case of a license sync, like when called from UpdateAppLicense + // the app object is not updated yet - but the license being passed in is the latest + selectedChannelID := opts.AppSelectedChannelID + if selectedChannelID == "" { + selectedChannelID = opts.App.SelectedChannelID + } + appNamespace := util.PodNamespace if os.Getenv("KOTSADM_TARGET_NAMESPACE") != "" { appNamespace = os.Getenv("KOTSADM_TARGET_NAMESPACE") } - reOptions := rewrite.RewriteOptions{ - RootDir: opts.ArchiveDir, - UpstreamURI: fmt.Sprintf("replicated://%s", license.Spec.AppSlug), - UpstreamPath: filepath.Join(opts.ArchiveDir, "upstream"), - Installation: installation, - Downstreams: downstreamNames, - Silent: true, - CreateAppDir: false, - ExcludeKotsKinds: true, - License: license, - ConfigValues: configValues, - K8sNamespace: appNamespace, - CopyImages: false, - IsAirgap: opts.App.IsAirgap, - AppID: opts.App.ID, - AppSlug: opts.App.Slug, - IsGitOps: opts.App.IsGitOps, - AppSequence: opts.Sequence, - ReportingInfo: opts.ReportingInfo, - RegistrySettings: opts.RegistrySettings, + RootDir: opts.ArchiveDir, + UpstreamURI: fmt.Sprintf("replicated://%s", license.Spec.AppSlug), + UpstreamPath: filepath.Join(opts.ArchiveDir, "upstream"), + Installation: installation, + Downstreams: downstreamNames, + Silent: true, + CreateAppDir: false, + ExcludeKotsKinds: true, + License: license, + ConfigValues: configValues, + K8sNamespace: appNamespace, + CopyImages: false, + IsAirgap: opts.App.IsAirgap, + AppID: opts.App.ID, + AppSlug: opts.App.Slug, + AppSelectedChannelID: selectedChannelID, + IsGitOps: opts.App.IsGitOps, + AppSequence: opts.Sequence, + ReportingInfo: opts.ReportingInfo, + RegistrySettings: opts.RegistrySettings, // TODO: pass in as arguments if this is ever called from CLI HTTPProxyEnvValue: os.Getenv("HTTP_PROXY"), diff --git a/pkg/render/types/interface.go b/pkg/render/types/interface.go index a56ce9fb99..525edf27c2 100644 --- a/pkg/render/types/interface.go +++ b/pkg/render/types/interface.go @@ -19,12 +19,13 @@ type RenderFileOptions struct { } type RenderDirOptions struct { - ArchiveDir string - App *apptypes.App - Downstreams []downstreamtypes.Downstream - RegistrySettings registrytypes.RegistrySettings - Sequence int64 - ReportingInfo *reportingtypes.ReportingInfo + ArchiveDir string + App *apptypes.App + Downstreams []downstreamtypes.Downstream + RegistrySettings registrytypes.RegistrySettings + Sequence int64 + ReportingInfo *reportingtypes.ReportingInfo + AppSelectedChannelID string } type Renderer interface { diff --git a/pkg/replicatedapp/api.go b/pkg/replicatedapp/api.go index fa7662f3c6..eebcad4878 100644 --- a/pkg/replicatedapp/api.go +++ b/pkg/replicatedapp/api.go @@ -40,9 +40,15 @@ type LicenseData struct { License *kotsv1beta1.License } -func GetLatestLicense(license *kotsv1beta1.License) (*LicenseData, error) { +// GetLatestLicense will return the latest license from the replicated api, if selectedChannelID is provided +// it will be passed along to the api. +func GetLatestLicense(license *kotsv1beta1.License, selectedChannelID string) (*LicenseData, error) { url := fmt.Sprintf("%s/license/%s", license.Spec.Endpoint, license.Spec.AppSlug) + if selectedChannelID != "" { + url = fmt.Sprintf("%s?selectedChannelId=%s", url, selectedChannelID) + } + licenseData, err := getLicenseFromAPI(url, license.Spec.LicenseID) if err != nil { return nil, errors.Wrap(err, "failed to get license from api") diff --git a/pkg/replicatedapp/api_test.go b/pkg/replicatedapp/api_test.go index 4d81d0f891..07103e0bee 100644 --- a/pkg/replicatedapp/api_test.go +++ b/pkg/replicatedapp/api_test.go @@ -30,7 +30,7 @@ func Test_getRequest(t *testing.T) { channel: nil, channelSequence: "", versionLabel: nil, - expectedURL: "https://replicated-app/release/sluggy1?channelSequence=&isSemverSupported=true&licenseSequence=23", + expectedURL: "https://replicated-app/release/sluggy1?channelSequence=&isSemverSupported=true&licenseSequence=23&selectedChannelId=channel", }, { endpoint: "http://localhost:30016", @@ -38,7 +38,7 @@ func Test_getRequest(t *testing.T) { channel: &beta, channelSequence: "", versionLabel: nil, - expectedURL: "http://localhost:30016/release/sluggy2/beta?channelSequence=&isSemverSupported=true&licenseSequence=23", + expectedURL: "http://localhost:30016/release/sluggy2/beta?channelSequence=&isSemverSupported=true&licenseSequence=23&selectedChannelId=channel", }, { endpoint: "https://replicated-app", @@ -46,7 +46,7 @@ func Test_getRequest(t *testing.T) { channel: &unstable, channelSequence: "10", versionLabel: nil, - expectedURL: "https://replicated-app/release/sluggy3/unstable?channelSequence=10&isSemverSupported=true&licenseSequence=23", + expectedURL: "https://replicated-app/release/sluggy3/unstable?channelSequence=10&isSemverSupported=true&licenseSequence=23&selectedChannelId=channel", }, { endpoint: "https://replicated-app", @@ -54,7 +54,7 @@ func Test_getRequest(t *testing.T) { channel: &unstable, channelSequence: "", versionLabel: &version, - expectedURL: "https://replicated-app/release/sluggy3/unstable?channelSequence=&isSemverSupported=true&licenseSequence=23&versionLabel=1.1.0", + expectedURL: "https://replicated-app/release/sluggy3/unstable?channelSequence=&isSemverSupported=true&licenseSequence=23&selectedChannelId=channel&versionLabel=1.1.0", }, } @@ -65,6 +65,7 @@ func Test_getRequest(t *testing.T) { Endpoint: test.endpoint, AppSlug: test.appSlug, LicenseSequence: 23, + ChannelID: "channel", }, } r := &ReplicatedUpstream{ @@ -77,7 +78,7 @@ func Test_getRequest(t *testing.T) { if test.channel != nil { cursor.ChannelName = *test.channel } - request, err := r.GetRequest("GET", license, cursor) + request, err := r.GetRequest("GET", license, cursor, channel) req.NoError(err) assert.Equal(t, test.expectedURL, request.URL.String()) } diff --git a/pkg/replicatedapp/upstream.go b/pkg/replicatedapp/upstream.go index c96aa418b1..4f52d6ca25 100644 --- a/pkg/replicatedapp/upstream.go +++ b/pkg/replicatedapp/upstream.go @@ -41,7 +41,7 @@ func ParseReplicatedURL(u *url.URL) (*ReplicatedUpstream, error) { return &replicatedUpstream, nil } -func (r *ReplicatedUpstream) GetRequest(method string, license *kotsv1beta1.License, cursor ReplicatedCursor) (*http.Request, error) { +func (r *ReplicatedUpstream) GetRequest(method string, license *kotsv1beta1.License, cursor ReplicatedCursor, selectedChannelID string) (*http.Request, error) { u, err := url.Parse(license.Spec.Endpoint) if err != nil { return nil, errors.Wrap(err, "failed to parse endpoint from license") @@ -64,6 +64,7 @@ func (r *ReplicatedUpstream) GetRequest(method string, license *kotsv1beta1.Lice } urlValues.Add("licenseSequence", fmt.Sprintf("%d", license.Spec.LicenseSequence)) urlValues.Add("isSemverSupported", "true") + urlValues.Add("selectedChannelId", selectedChannelID) url := fmt.Sprintf("%s://%s?%s", u.Scheme, urlPath, urlValues.Encode()) diff --git a/pkg/rewrite/rewrite.go b/pkg/rewrite/rewrite.go index edfaceeb27..c8390cd8e3 100644 --- a/pkg/rewrite/rewrite.go +++ b/pkg/rewrite/rewrite.go @@ -29,29 +29,30 @@ import ( ) type RewriteOptions struct { - RootDir string - UpstreamURI string - UpstreamPath string - Downstreams []string - K8sNamespace string - Silent bool - CreateAppDir bool - ExcludeKotsKinds bool - Installation *kotsv1beta1.Installation - License *kotsv1beta1.License - ConfigValues *kotsv1beta1.ConfigValues - ReportWriter io.Writer - CopyImages bool // can be false even if registry is not read-only - IsAirgap bool - RegistrySettings registrytypes.RegistrySettings - AppID string - AppSlug string - IsGitOps bool - AppSequence int64 - ReportingInfo *reportingtypes.ReportingInfo - HTTPProxyEnvValue string - HTTPSProxyEnvValue string - NoProxyEnvValue string + RootDir string + UpstreamURI string + UpstreamPath string + Downstreams []string + K8sNamespace string + Silent bool + CreateAppDir bool + ExcludeKotsKinds bool + Installation *kotsv1beta1.Installation + License *kotsv1beta1.License + ConfigValues *kotsv1beta1.ConfigValues + ReportWriter io.Writer + CopyImages bool // can be false even if registry is not read-only + IsAirgap bool + RegistrySettings registrytypes.RegistrySettings + AppID string + AppSlug string + AppSelectedChannelID string + IsGitOps bool + AppSequence int64 + ReportingInfo *reportingtypes.ReportingInfo + HTTPProxyEnvValue string + HTTPSProxyEnvValue string + NoProxyEnvValue string } func Rewrite(rewriteOptions RewriteOptions) error { @@ -81,6 +82,7 @@ func Rewrite(rewriteOptions RewriteOptions) error { License: rewriteOptions.License, AppSequence: rewriteOptions.AppSequence, AppSlug: rewriteOptions.AppSlug, + AppSelectedChannelID: rewriteOptions.AppSelectedChannelID, LocalRegistry: rewriteOptions.RegistrySettings, ReportingInfo: rewriteOptions.ReportingInfo, SkipCompatibilityCheck: true, // we're rewriting an existing version, no need to check for compatibility diff --git a/pkg/store/kotsstore/airgap_store.go b/pkg/store/kotsstore/airgap_store.go index 3e6a013c16..54e38c1c80 100644 --- a/pkg/store/kotsstore/airgap_store.go +++ b/pkg/store/kotsstore/airgap_store.go @@ -28,7 +28,7 @@ func (s *KOTSStore) GetPendingAirgapUploadApp() (*airgaptypes.PendingApp, error) return nil, errors.Wrap(err, "failed to scan pending app id") } - query = `select id, slug, name, license from app where id = ?` + query = `select id, slug, name, license, selected_channel_id from app where id = ?` rows, err = db.QueryOneParameterized(gorqlite.ParameterizedStatement{ Query: query, Arguments: []interface{}{id}, @@ -41,7 +41,7 @@ func (s *KOTSStore) GetPendingAirgapUploadApp() (*airgaptypes.PendingApp, error) } pendingApp := airgaptypes.PendingApp{} - if err := rows.Scan(&pendingApp.ID, &pendingApp.Slug, &pendingApp.Name, &pendingApp.LicenseData); err != nil { + if err := rows.Scan(&pendingApp.ID, &pendingApp.Slug, &pendingApp.Name, &pendingApp.LicenseData, &pendingApp.SelectedChannelID); err != nil { return nil, errors.Wrap(err, "failed to scan pending app") } diff --git a/pkg/store/kotsstore/app_store.go b/pkg/store/kotsstore/app_store.go index 847f8b7df9..e3e6dd8dd7 100644 --- a/pkg/store/kotsstore/app_store.go +++ b/pkg/store/kotsstore/app_store.go @@ -13,10 +13,12 @@ import ( "github.com/replicatedhq/kots/pkg/kotsutil" "github.com/replicatedhq/kots/pkg/logger" "github.com/replicatedhq/kots/pkg/persistence" + kotsv1beta1 "github.com/replicatedhq/kotskinds/apis/kots/v1beta1" troubleshootanalyze "github.com/replicatedhq/troubleshoot/pkg/analyze" "github.com/rqlite/gorqlite" "github.com/segmentio/ksuid" "go.uber.org/zap" + "k8s.io/client-go/kubernetes/scheme" ) func (s *KOTSStore) AddAppToAllDownstreams(appID string) error { @@ -146,7 +148,7 @@ func (s *KOTSStore) GetAppIDFromSlug(slug string) (string, error) { func (s *KOTSStore) GetApp(id string) (*apptypes.App, error) { db := persistence.MustGetDBSession() - query := `select id, name, license, upstream_uri, icon_uri, created_at, updated_at, slug, current_sequence, last_update_check_at, last_license_sync, is_airgap, snapshot_ttl_new, snapshot_schedule, restore_in_progress_name, restore_undeploy_status, update_checker_spec, semver_auto_deploy, install_state, channel_changed from app where id = ?` + query := `select id, name, license, upstream_uri, icon_uri, created_at, updated_at, slug, current_sequence, last_update_check_at, last_license_sync, is_airgap, snapshot_ttl_new, snapshot_schedule, restore_in_progress_name, restore_undeploy_status, update_checker_spec, semver_auto_deploy, install_state, channel_changed, selected_channel_id from app where id = ?` rows, err := db.QueryOneParameterized(gorqlite.ParameterizedStatement{ Query: query, Arguments: []interface{}{id}, @@ -173,8 +175,9 @@ func (s *KOTSStore) GetApp(id string) (*apptypes.App, error) { var restoreUndeployStatus gorqlite.NullString var updateCheckerSpec gorqlite.NullString var autoDeploy gorqlite.NullString + var selectedChannelId gorqlite.NullString - if err := rows.Scan(&app.ID, &app.Name, &licenseStr, &upstreamURI, &iconURI, &app.CreatedAt, &updatedAt, &app.Slug, ¤tSequence, &lastUpdateCheckAt, &lastLicenseSync, &app.IsAirgap, &snapshotTTLNew, &snapshotSchedule, &restoreInProgressName, &restoreUndeployStatus, &updateCheckerSpec, &autoDeploy, &app.InstallState, &app.ChannelChanged); err != nil { + if err := rows.Scan(&app.ID, &app.Name, &licenseStr, &upstreamURI, &iconURI, &app.CreatedAt, &updatedAt, &app.Slug, ¤tSequence, &lastUpdateCheckAt, &lastLicenseSync, &app.IsAirgap, &snapshotTTLNew, &snapshotSchedule, &restoreInProgressName, &restoreUndeployStatus, &updateCheckerSpec, &autoDeploy, &app.InstallState, &app.ChannelChanged, &selectedChannelId); err != nil { return nil, errors.Wrap(err, "failed to scan app") } @@ -187,6 +190,7 @@ func (s *KOTSStore) GetApp(id string) (*apptypes.App, error) { app.RestoreUndeployStatus = apptypes.UndeployStatus(restoreUndeployStatus.String) app.UpdateCheckerSpec = updateCheckerSpec.String app.AutoDeploy = apptypes.AutoDeploy(autoDeploy.String) + app.SelectedChannelID = selectedChannelId.String if lastLicenseSync.Valid { app.LastLicenseSync = lastLicenseSync.Time.Format(time.RFC3339) @@ -267,6 +271,20 @@ func (s *KOTSStore) GetApp(id string) (*apptypes.App, error) { } app.IsGitOps = isGitOps + if app.SelectedChannelID == "" { + decode := scheme.Codecs.UniversalDeserializer().Decode + obj, _, err := decode([]byte(licenseStr.String), nil, nil) + if err != nil { + return nil, errors.Wrap(err, "failed to decode license yaml") + } + license := obj.(*kotsv1beta1.License) + licenseChan, err := s.backfillChannelIDFromLicense(app.ID, license) + if err != nil { + return nil, errors.Wrap(err, "failed to backfill channel id") + } + app.SelectedChannelID = licenseChan.ChannelID + } + return &app, nil } @@ -279,10 +297,12 @@ func (s *KOTSStore) GetAppFromSlug(slug string) (*apptypes.App, error) { return s.GetApp(id) } -func (s *KOTSStore) CreateApp(name string, upstreamURI string, licenseData string, isAirgapEnabled bool, skipImagePush bool, registryIsReadOnly bool) (*apptypes.App, error) { +func (s *KOTSStore) CreateApp(name string, selectedChannelID string, upstreamURI string, licenseData string, isAirgapEnabled bool, skipImagePush bool, registryIsReadOnly bool) (*apptypes.App, error) { logger.Debug("creating app", zap.String("name", name), - zap.String("upstreamURI", upstreamURI)) + zap.String("upstreamURI", upstreamURI), + zap.String("selectedChannelID", selectedChannelID), + ) db := persistence.MustGetDBSession() @@ -337,10 +357,10 @@ func (s *KOTSStore) CreateApp(name string, upstreamURI string, licenseData strin id := ksuid.New().String() - query := `insert into app (id, name, icon_uri, created_at, slug, upstream_uri, license, is_all_users, install_state, registry_is_readonly) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)` + query := `insert into app (id, name, icon_uri, created_at, slug, upstream_uri, license, is_all_users, install_state, registry_is_readonly, selected_channel_id) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)` wr, err := db.WriteOneParameterized(gorqlite.ParameterizedStatement{ Query: query, - Arguments: []interface{}{id, name, "", time.Now().Unix(), slugProposal, upstreamURI, licenseData, true, installState, registryIsReadOnly}, + Arguments: []interface{}{id, name, "", time.Now().Unix(), slugProposal, upstreamURI, licenseData, true, installState, registryIsReadOnly, selectedChannelID}, }) if err != nil { return nil, fmt.Errorf("failed to insert app: %v: %v", err, wr.Err) @@ -594,3 +614,50 @@ func (s *KOTSStore) SetAppChannelChanged(appID string, channelChanged bool) erro return nil } + +func (s *KOTSStore) GetAppSelectedChannelID(appID string) (string, error) { + db := persistence.MustGetDBSession() + query := `select selected_channel_id from app where id = ?` + rows, err := db.QueryOneParameterized(gorqlite.ParameterizedStatement{ + Query: query, + Arguments: []interface{}{appID}, + }) + if err != nil { + return "", fmt.Errorf("failed to query: %v: %v", err, rows.Err) + } + if !rows.Next() { + return "", ErrNotFound + } + + var channelID gorqlite.NullString + if err := rows.Scan(&channelID); err != nil { + return "", errors.Wrap(err, "failed to scan channel id") + } + + return channelID.String, nil +} + +func (s *KOTSStore) SetAppSelectedChannelID(appID string, channelID string) error { + logger.Debug("setting app channel id", + zap.String("appID", appID), zap.String("channelID", channelID)) + db := persistence.MustGetDBSession() + + query := `update app set selected_channel_id = ? where id = ?` + wr, err := db.WriteOneParameterized(gorqlite.ParameterizedStatement{ + Query: query, + Arguments: []interface{}{channelID, appID}, + }) + if err != nil { + return fmt.Errorf("failed to update app channel id: %v: %v", err, wr.Err) + } + + return nil +} + +func (s *KOTSStore) backfillChannelIDFromLicense(appID string, license *kotsv1beta1.License) (*kotsv1beta1.Channel, error) { + backfillID := kotsutil.GetDefaultChannelIDFromLicense(license) + if err := s.SetAppSelectedChannelID(appID, backfillID); err != nil { + return nil, errors.Wrap(err, "failed to backfill app channel id from license") + } + return kotsutil.FindChannelInLicense(backfillID, license) +} diff --git a/pkg/store/kotsstore/downstream_store.go b/pkg/store/kotsstore/downstream_store.go index 1a87320104..b69db3cf9a 100644 --- a/pkg/store/kotsstore/downstream_store.go +++ b/pkg/store/kotsstore/downstream_store.go @@ -409,6 +409,7 @@ func (s *KOTSStore) GetDownstreamVersions(appID string, clusterID string, downlo if err != nil { return nil, errors.Wrap(err, "failed to get app license") } + downstreamtypes.SortDownstreamVersions(result.AllVersions, license.Spec.IsSemverRequired) // retrieve additional details about the latest downloaded version, @@ -673,6 +674,7 @@ func (s *KOTSStore) AddDownstreamVersionsDetails(appID string, clusterID string, if err != nil { return errors.Wrap(err, "failed to get app license") } + for _, v := range versions { v.IsDeployable, v.NonDeployableCause = isAppVersionDeployable(v, allVersions, license.Spec.IsSemverRequired) } diff --git a/pkg/store/kotsstore/license_store.go b/pkg/store/kotsstore/license_store.go index 3c2477c1d1..4cc4da6e0e 100644 --- a/pkg/store/kotsstore/license_store.go +++ b/pkg/store/kotsstore/license_store.go @@ -121,13 +121,32 @@ func (s *KOTSStore) UpdateAppLicense(appID string, baseSequence int64, archiveDi return int64(0), errors.Wrap(err, "failed to write new license") } - // app has the original license data received from the server - statements = append(statements, gorqlite.ParameterizedStatement{ - Query: `update app set license = ?, last_license_sync = ?, channel_changed = ? where id = ?`, - Arguments: []interface{}{originalLicenseData, time.Now().Unix(), channelChanged, appID}, - }) + selectedChannelId, err := s.GetAppSelectedChannelID(appID) + if err != nil { + return int64(0), errors.Wrap(err, "failed to get existing app selected channel id") + } + + // If the license channels array has more than one entry, then the license is a true multi-channel license, + // and we should skip updating selected_channel_id in the app table. If there's only a single entry, + // we should update the selected_channel_id in the app table to ensure it stays consistent across channel + // changes. This is a temporary solution until channel changes on true multi-channel licenses are supported. + if len(newLicense.Spec.Channels) > 1 { + logger.Debug("Skipping selected_channel_id update for multi-channel license") + // app has the original license data received from the server + statements = append(statements, gorqlite.ParameterizedStatement{ + Query: `update app set license = ?, last_license_sync = ?, channel_changed = ? where id = ?`, + Arguments: []interface{}{originalLicenseData, time.Now().Unix(), channelChanged, appID}, + }) + } else { + // app has the original license data received from the server + statements = append(statements, gorqlite.ParameterizedStatement{ + Query: `update app set license = ?, last_license_sync = ?, channel_changed = ?, selected_channel_id = ? where id = ?`, + Arguments: []interface{}{originalLicenseData, time.Now().Unix(), channelChanged, newLicense.Spec.ChannelID, appID}, + }) + selectedChannelId = newLicense.Spec.ChannelID + } - appVersionStatements, newSeq, err := s.createNewVersionForLicenseChangeStatements(appID, baseSequence, archiveDir, renderer, reportingInfo) + appVersionStatements, newSeq, err := s.createNewVersionForLicenseChangeStatements(appID, baseSequence, archiveDir, renderer, reportingInfo, selectedChannelId) if err != nil { // ignore error here to prevent a failure to render the current version // preventing the end-user from updating the application @@ -164,7 +183,7 @@ func (s *KOTSStore) UpdateAppLicenseSyncNow(appID string) error { return nil } -func (s *KOTSStore) createNewVersionForLicenseChangeStatements(appID string, baseSequence int64, archiveDir string, renderer rendertypes.Renderer, reportingInfo *reportingtypes.ReportingInfo) ([]gorqlite.ParameterizedStatement, int64, error) { +func (s *KOTSStore) createNewVersionForLicenseChangeStatements(appID string, baseSequence int64, archiveDir string, renderer rendertypes.Renderer, reportingInfo *reportingtypes.ReportingInfo, selectedChannelID string) ([]gorqlite.ParameterizedStatement, int64, error) { registrySettings, err := s.GetRegistryDetailsForApp(appID) if err != nil { return nil, int64(0), errors.Wrap(err, "failed to get registry settings for app") @@ -186,12 +205,13 @@ func (s *KOTSStore) createNewVersionForLicenseChangeStatements(appID string, bas } if err := renderer.RenderDir(rendertypes.RenderDirOptions{ - ArchiveDir: archiveDir, - App: app, - Downstreams: downstreams, - RegistrySettings: registrySettings, - Sequence: nextAppSequence, - ReportingInfo: reportingInfo, + ArchiveDir: archiveDir, + App: app, + Downstreams: downstreams, + RegistrySettings: registrySettings, + Sequence: nextAppSequence, + ReportingInfo: reportingInfo, + AppSelectedChannelID: selectedChannelID, }); err != nil { return nil, int64(0), errors.Wrap(err, "failed to render new version") } diff --git a/pkg/store/kotsstore/version_store.go b/pkg/store/kotsstore/version_store.go index 92492cc581..98b4da9160 100644 --- a/pkg/store/kotsstore/version_store.go +++ b/pkg/store/kotsstore/version_store.go @@ -439,7 +439,6 @@ func (s *KOTSStore) UpdateAppVersion(appID string, sequence int64, baseSequence func (s *KOTSStore) CreateAppVersion(appID string, baseSequence *int64, filesInDir string, source string, skipPreflights bool, renderer rendertypes.Renderer) (int64, error) { db := persistence.MustGetDBSession() - appVersionStatements, newSequence, err := s.createAppVersionStatements(appID, baseSequence, filesInDir, source, skipPreflights, renderer) if err != nil { return 0, errors.Wrap(err, "failed to construct app version statements") diff --git a/pkg/store/mock/mock.go b/pkg/store/mock/mock.go index 0f65b2fea2..9d696b3afd 100644 --- a/pkg/store/mock/mock.go +++ b/pkg/store/mock/mock.go @@ -97,18 +97,18 @@ func (mr *MockStoreMockRecorder) AddDownstreamVersionsDetails(appID, clusterID, } // CreateApp mocks base method. -func (m *MockStore) CreateApp(name, upstreamURI, licenseData string, isAirgapEnabled, skipImagePush, registryIsReadOnly bool) (*types3.App, error) { +func (m *MockStore) CreateApp(name, channelID, upstreamURI, licenseData string, isAirgapEnabled, skipImagePush, registryIsReadOnly bool) (*types3.App, error) { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "CreateApp", name, upstreamURI, licenseData, isAirgapEnabled, skipImagePush, registryIsReadOnly) + ret := m.ctrl.Call(m, "CreateApp", name, channelID, upstreamURI, licenseData, isAirgapEnabled, skipImagePush, registryIsReadOnly) ret0, _ := ret[0].(*types3.App) ret1, _ := ret[1].(error) return ret0, ret1 } // CreateApp indicates an expected call of CreateApp. -func (mr *MockStoreMockRecorder) CreateApp(name, upstreamURI, licenseData, isAirgapEnabled, skipImagePush, registryIsReadOnly interface{}) *gomock.Call { +func (mr *MockStoreMockRecorder) CreateApp(name, channelID, upstreamURI, licenseData, isAirgapEnabled, skipImagePush, registryIsReadOnly interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CreateApp", reflect.TypeOf((*MockStore)(nil).CreateApp), name, upstreamURI, licenseData, isAirgapEnabled, skipImagePush, registryIsReadOnly) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CreateApp", reflect.TypeOf((*MockStore)(nil).CreateApp), name, channelID, upstreamURI, licenseData, isAirgapEnabled, skipImagePush, registryIsReadOnly) } // CreateAppVersion mocks base method. @@ -1546,6 +1546,20 @@ func (mr *MockStoreMockRecorder) SetAppIsAirgap(appID, isAirgap interface{}) *go return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "SetAppIsAirgap", reflect.TypeOf((*MockStore)(nil).SetAppIsAirgap), appID, isAirgap) } +// SetAppSelectedChannelID mocks base method. +func (m *MockStore) SetAppSelectedChannelID(appID, channelID string) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "SetAppSelectedChannelID", appID, channelID) + ret0, _ := ret[0].(error) + return ret0 +} + +// SetAppSelectedChannelID indicates an expected call of SetAppSelectedChannelID. +func (mr *MockStoreMockRecorder) SetAppSelectedChannelID(appID, channelID interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "SetAppSelectedChannelID", reflect.TypeOf((*MockStore)(nil).SetAppSelectedChannelID), appID, channelID) +} + // SetAppStatus mocks base method. func (m *MockStore) SetAppStatus(appID string, resourceStates types4.ResourceStates, updatedAt time.Time, sequence int64) error { m.ctrl.T.Helper() @@ -2680,18 +2694,18 @@ func (mr *MockAppStoreMockRecorder) AddAppToAllDownstreams(appID interface{}) *g } // CreateApp mocks base method. -func (m *MockAppStore) CreateApp(name, upstreamURI, licenseData string, isAirgapEnabled, skipImagePush, registryIsReadOnly bool) (*types3.App, error) { +func (m *MockAppStore) CreateApp(name, channelID, upstreamURI, licenseData string, isAirgapEnabled, skipImagePush, registryIsReadOnly bool) (*types3.App, error) { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "CreateApp", name, upstreamURI, licenseData, isAirgapEnabled, skipImagePush, registryIsReadOnly) + ret := m.ctrl.Call(m, "CreateApp", name, channelID, upstreamURI, licenseData, isAirgapEnabled, skipImagePush, registryIsReadOnly) ret0, _ := ret[0].(*types3.App) ret1, _ := ret[1].(error) return ret0, ret1 } // CreateApp indicates an expected call of CreateApp. -func (mr *MockAppStoreMockRecorder) CreateApp(name, upstreamURI, licenseData, isAirgapEnabled, skipImagePush, registryIsReadOnly interface{}) *gomock.Call { +func (mr *MockAppStoreMockRecorder) CreateApp(name, channelID, upstreamURI, licenseData, isAirgapEnabled, skipImagePush, registryIsReadOnly interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CreateApp", reflect.TypeOf((*MockAppStore)(nil).CreateApp), name, upstreamURI, licenseData, isAirgapEnabled, skipImagePush, registryIsReadOnly) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CreateApp", reflect.TypeOf((*MockAppStore)(nil).CreateApp), name, channelID, upstreamURI, licenseData, isAirgapEnabled, skipImagePush, registryIsReadOnly) } // GetApp mocks base method. @@ -2886,6 +2900,20 @@ func (mr *MockAppStoreMockRecorder) SetAppInstallState(appID, state interface{}) return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "SetAppInstallState", reflect.TypeOf((*MockAppStore)(nil).SetAppInstallState), appID, state) } +// SetAppSelectedChannelID mocks base method. +func (m *MockAppStore) SetAppSelectedChannelID(appID, channelID string) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "SetAppSelectedChannelID", appID, channelID) + ret0, _ := ret[0].(error) + return ret0 +} + +// SetAppSelectedChannelID indicates an expected call of SetAppSelectedChannelID. +func (mr *MockAppStoreMockRecorder) SetAppSelectedChannelID(appID, channelID interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "SetAppSelectedChannelID", reflect.TypeOf((*MockAppStore)(nil).SetAppSelectedChannelID), appID, channelID) +} + // SetAutoDeploy mocks base method. func (m *MockAppStore) SetAutoDeploy(appID string, autoDeploy types3.AutoDeploy) error { m.ctrl.T.Helper() diff --git a/pkg/store/store_interface.go b/pkg/store/store_interface.go index 049fc2de18..c487980c64 100644 --- a/pkg/store/store_interface.go +++ b/pkg/store/store_interface.go @@ -120,7 +120,7 @@ type AppStore interface { GetAppIDFromSlug(slug string) (appID string, err error) GetApp(appID string) (*apptypes.App, error) GetAppFromSlug(slug string) (*apptypes.App, error) - CreateApp(name string, upstreamURI string, licenseData string, isAirgapEnabled bool, skipImagePush bool, registryIsReadOnly bool) (*apptypes.App, error) + CreateApp(name string, channelID string, upstreamURI string, licenseData string, isAirgapEnabled bool, skipImagePush bool, registryIsReadOnly bool) (*apptypes.App, error) ListDownstreamsForApp(appID string) ([]downstreamtypes.Downstream, error) ListAppsForDownstream(clusterID string) ([]*apptypes.App, error) GetDownstream(clusterID string) (*downstreamtypes.Downstream, error) @@ -131,6 +131,7 @@ type AppStore interface { SetSnapshotSchedule(appID string, snapshotSchedule string) error RemoveApp(appID string) error SetAppChannelChanged(appID string, channelChanged bool) error + SetAppSelectedChannelID(appID string, channelID string) error } type DownstreamStore interface { diff --git a/pkg/tests/pull/cases/airgap/testcase.yaml b/pkg/tests/pull/cases/airgap/testcase.yaml index 406773976c..b597227ffa 100644 --- a/pkg/tests/pull/cases/airgap/testcase.yaml +++ b/pkg/tests/pull/cases/airgap/testcase.yaml @@ -15,4 +15,5 @@ PullOptions: Password: fake-pass IsReadOnly: true Downstreams: - - this-cluster \ No newline at end of file + - this-cluster + AppSelectedChannelID: 1vusIYZLAVxMG6q760OJmRKj5i5 \ No newline at end of file diff --git a/pkg/tests/pull/cases/configcontext/testcase.yaml b/pkg/tests/pull/cases/configcontext/testcase.yaml index a2dc01e2cb..3d5440c8f1 100644 --- a/pkg/tests/pull/cases/configcontext/testcase.yaml +++ b/pkg/tests/pull/cases/configcontext/testcase.yaml @@ -13,4 +13,5 @@ PullOptions: Password: fake-pass IsReadOnly: true Downstreams: - - this-cluster \ No newline at end of file + - this-cluster + AppSelectedChannelID: 1vusIYZLAVxMG6q760OJmRKj5i5 \ No newline at end of file diff --git a/pkg/tests/pull/cases/customhostnames/testcase.yaml b/pkg/tests/pull/cases/customhostnames/testcase.yaml index 05385c5044..1db21dc494 100644 --- a/pkg/tests/pull/cases/customhostnames/testcase.yaml +++ b/pkg/tests/pull/cases/customhostnames/testcase.yaml @@ -8,4 +8,5 @@ PullOptions: SharedPassword: dummy-pass RewriteImages: false Downstreams: - - this-cluster \ No newline at end of file + - this-cluster + AppSelectedChannelID: 1vusIYZLAVxMG6q760OJmRKj5i5 \ No newline at end of file diff --git a/pkg/tests/pull/cases/kotskinds/testcase.yaml b/pkg/tests/pull/cases/kotskinds/testcase.yaml index 080188080e..82e589a62f 100644 --- a/pkg/tests/pull/cases/kotskinds/testcase.yaml +++ b/pkg/tests/pull/cases/kotskinds/testcase.yaml @@ -9,4 +9,5 @@ PullOptions: RewriteImages: false Downstreams: - this-cluster - SkipHelmChartCheck: true \ No newline at end of file + SkipHelmChartCheck: true + AppSelectedChannelID: 1vusIYZLAVxMG6q760OJmRKj5i5 \ No newline at end of file diff --git a/pkg/tests/pull/cases/multidoc/testcase.yaml b/pkg/tests/pull/cases/multidoc/testcase.yaml index fae3553d4c..02d3eff940 100644 --- a/pkg/tests/pull/cases/multidoc/testcase.yaml +++ b/pkg/tests/pull/cases/multidoc/testcase.yaml @@ -8,4 +8,5 @@ PullOptions: SharedPassword: dummy-pass RewriteImages: false Downstreams: - - this-cluster \ No newline at end of file + - this-cluster + AppSelectedChannelID: 1vusIYZLAVxMG6q760OJmRKj5i5 \ No newline at end of file diff --git a/pkg/tests/pull/cases/needsconfig/testcase.yaml b/pkg/tests/pull/cases/needsconfig/testcase.yaml index 82693ef8fe..90d8083e0a 100644 --- a/pkg/tests/pull/cases/needsconfig/testcase.yaml +++ b/pkg/tests/pull/cases/needsconfig/testcase.yaml @@ -9,4 +9,5 @@ PullOptions: RewriteImages: false Downstreams: - this-cluster - SkipHelmChartCheck: true \ No newline at end of file + SkipHelmChartCheck: true + AppSelectedChannelID: 1vusIYZLAVxMG6q760OJmRKj5i5 \ No newline at end of file diff --git a/pkg/tests/pull/cases/replicatedhelm/testcase.yaml b/pkg/tests/pull/cases/replicatedhelm/testcase.yaml index 8ba924c060..bc256e88c8 100644 --- a/pkg/tests/pull/cases/replicatedhelm/testcase.yaml +++ b/pkg/tests/pull/cases/replicatedhelm/testcase.yaml @@ -8,4 +8,5 @@ PullOptions: SharedPassword: dummy-pass RewriteImages: false Downstreams: - - this-cluster \ No newline at end of file + - this-cluster + AppSelectedChannelID: 1vusIYZLAVxMG6q760OJmRKj5i5 \ No newline at end of file diff --git a/pkg/tests/pull/cases/required-helm-values/testcase.yaml b/pkg/tests/pull/cases/required-helm-values/testcase.yaml index 32e8a5ee3e..64fb4f5238 100644 --- a/pkg/tests/pull/cases/required-helm-values/testcase.yaml +++ b/pkg/tests/pull/cases/required-helm-values/testcase.yaml @@ -8,4 +8,5 @@ PullOptions: SharedPassword: dummy-pass RewriteImages: false Downstreams: - - this-cluster \ No newline at end of file + - this-cluster + AppSelectedChannelID: 1vusIYZLAVxMG6q760OJmRKj5i5 \ No newline at end of file diff --git a/pkg/tests/pull/cases/samechartvariations/testcase.yaml b/pkg/tests/pull/cases/samechartvariations/testcase.yaml index 0bce10bb5a..35210f96e5 100644 --- a/pkg/tests/pull/cases/samechartvariations/testcase.yaml +++ b/pkg/tests/pull/cases/samechartvariations/testcase.yaml @@ -15,4 +15,5 @@ PullOptions: Password: fake-pass IsReadOnly: true Downstreams: - - this-cluster \ No newline at end of file + - this-cluster + AppSelectedChannelID: 1YHCrcZzBxY2nJF5kcTCN9PHpk0 \ No newline at end of file diff --git a/pkg/tests/pull/cases/simple/testcase.yaml b/pkg/tests/pull/cases/simple/testcase.yaml index ad55b19a33..3d4dd74c6e 100644 --- a/pkg/tests/pull/cases/simple/testcase.yaml +++ b/pkg/tests/pull/cases/simple/testcase.yaml @@ -8,4 +8,5 @@ PullOptions: SharedPassword: dummy-pass RewriteImages: false Downstreams: - - this-cluster \ No newline at end of file + - this-cluster + AppSelectedChannelID: 1vusIYZLAVxMG6q760OJmRKj5i5 \ No newline at end of file diff --git a/pkg/tests/pull/cases/subchart-alias/testcase.yaml b/pkg/tests/pull/cases/subchart-alias/testcase.yaml index 8e34a604d2..848952c4bb 100644 --- a/pkg/tests/pull/cases/subchart-alias/testcase.yaml +++ b/pkg/tests/pull/cases/subchart-alias/testcase.yaml @@ -13,4 +13,5 @@ PullOptions: Password: fake-pass IsReadOnly: true Downstreams: - - this-cluster \ No newline at end of file + - this-cluster + AppSelectedChannelID: 1vusIYZLAVxMG6q760OJmRKj5i5 \ No newline at end of file diff --git a/pkg/tests/pull/cases/subchart-crds/testcase.yaml b/pkg/tests/pull/cases/subchart-crds/testcase.yaml index 348f723ac5..811851da1e 100644 --- a/pkg/tests/pull/cases/subchart-crds/testcase.yaml +++ b/pkg/tests/pull/cases/subchart-crds/testcase.yaml @@ -8,4 +8,5 @@ PullOptions: SharedPassword: dummy-pass RewriteImages: false Downstreams: - - this-cluster \ No newline at end of file + - this-cluster + AppSelectedChannelID: 1vusIYZLAVxMG6q760OJmRKj5i5 \ No newline at end of file diff --git a/pkg/tests/pull/cases/subcharts/testcase.yaml b/pkg/tests/pull/cases/subcharts/testcase.yaml index 34e8fb76ed..e679f3b89b 100644 --- a/pkg/tests/pull/cases/subcharts/testcase.yaml +++ b/pkg/tests/pull/cases/subcharts/testcase.yaml @@ -13,4 +13,5 @@ PullOptions: Password: fake-pass IsReadOnly: true Downstreams: - - this-cluster \ No newline at end of file + - this-cluster + AppSelectedChannelID: 1vusIYZLAVxMG6q760OJmRKj5i5 \ No newline at end of file diff --git a/pkg/tests/pull/cases/taganddigest-norewrite/testcase.yaml b/pkg/tests/pull/cases/taganddigest-norewrite/testcase.yaml index 96cad188f6..e9ae529d29 100644 --- a/pkg/tests/pull/cases/taganddigest-norewrite/testcase.yaml +++ b/pkg/tests/pull/cases/taganddigest-norewrite/testcase.yaml @@ -8,4 +8,5 @@ PullOptions: SharedPassword: dummy-pass RewriteImages: false Downstreams: - - this-cluster \ No newline at end of file + - this-cluster + AppSelectedChannelID: 1vusIYZLAVxMG6q760OJmRKj5i5 \ No newline at end of file diff --git a/pkg/tests/pull/cases/taganddigest-rewrite/testcase.yaml b/pkg/tests/pull/cases/taganddigest-rewrite/testcase.yaml index ca965930fa..2fdd9059e1 100644 --- a/pkg/tests/pull/cases/taganddigest-rewrite/testcase.yaml +++ b/pkg/tests/pull/cases/taganddigest-rewrite/testcase.yaml @@ -14,4 +14,5 @@ PullOptions: Password: fake-pass IsReadOnly: true Downstreams: - - this-cluster \ No newline at end of file + - this-cluster + AppSelectedChannelID: 1vusIYZLAVxMG6q760OJmRKj5i5 \ No newline at end of file diff --git a/pkg/tests/pull/cases/v1beta2-charts/testcase.yaml b/pkg/tests/pull/cases/v1beta2-charts/testcase.yaml index d0bc3fb357..9d67049213 100644 --- a/pkg/tests/pull/cases/v1beta2-charts/testcase.yaml +++ b/pkg/tests/pull/cases/v1beta2-charts/testcase.yaml @@ -14,4 +14,5 @@ PullOptions: Password: fake-pass IsReadOnly: true Downstreams: - - this-cluster \ No newline at end of file + - this-cluster + AppSelectedChannelID: 1vusIYZLAVxMG6q760OJmRKj5i5 \ No newline at end of file diff --git a/pkg/tests/renderdir/cases/outdated-kotskinds/testcase.yaml b/pkg/tests/renderdir/cases/outdated-kotskinds/testcase.yaml index 3d61cfa465..db0ea96ffd 100644 --- a/pkg/tests/renderdir/cases/outdated-kotskinds/testcase.yaml +++ b/pkg/tests/renderdir/cases/outdated-kotskinds/testcase.yaml @@ -4,6 +4,7 @@ RenderDirOptions: App: ID: app-id Slug: my-app + SelectedChannelID: 1vusIYZLAVxMG6q760OJmRKj5i5 Downstreams: - Name: this-cluster Sequence: 1 \ No newline at end of file diff --git a/pkg/tests/renderdir/renderdir_test.go b/pkg/tests/renderdir/renderdir_test.go index 3eb9d5ccb1..30f9cebed0 100644 --- a/pkg/tests/renderdir/renderdir_test.go +++ b/pkg/tests/renderdir/renderdir_test.go @@ -73,7 +73,6 @@ func TestKotsRenderDir(t *testing.T) { Name: spec.Name, RenderDirOptions: spec.RenderDirOptions, } - tests = append(tests, test) } require.NoError(t, err) diff --git a/pkg/update/required.go b/pkg/update/required.go index 3ed40dca22..36e3ef6e37 100644 --- a/pkg/update/required.go +++ b/pkg/update/required.go @@ -41,7 +41,7 @@ func IsAirgapUpdateDeployable(app *apptypes.App, airgap *kotsv1beta1.Airgap) (bo if err != nil { return false, "", errors.Wrap(err, "failed to load license") } - requiredUpdates, err := getRequiredAirgapUpdates(airgap, license, appVersions.AllVersions, app.ChannelChanged) + requiredUpdates, err := getRequiredAirgapUpdates(airgap, license, appVersions.AllVersions, app.ChannelChanged, app.SelectedChannelID) if err != nil { return false, "", errors.Wrap(err, "failed to get missing required versions") } @@ -51,7 +51,7 @@ func IsAirgapUpdateDeployable(app *apptypes.App, airgap *kotsv1beta1.Airgap) (bo return true, "", nil } -func getRequiredAirgapUpdates(airgap *kotsv1beta1.Airgap, license *kotsv1beta1.License, installedVersions []*downstreamtypes.DownstreamVersion, channelChanged bool) ([]string, error) { +func getRequiredAirgapUpdates(airgap *kotsv1beta1.Airgap, license *kotsv1beta1.License, installedVersions []*downstreamtypes.DownstreamVersion, channelChanged bool, selectedChannelID string) ([]string, error) { requiredUpdates := make([]string, 0) // If no versions are installed, we can consider this an initial install. // If the channel changed, we can consider this an initial install. @@ -64,9 +64,14 @@ func getRequiredAirgapUpdates(airgap *kotsv1beta1.Airgap, license *kotsv1beta1.L for _, appVersion := range installedVersions { requiredSemver, requiredSemverErr := semver.ParseTolerant(requiredRelease.VersionLabel) + licenseChan, err := kotsutil.FindChannelInLicense(selectedChannelID, license) + if err != nil { + return nil, errors.Wrap(err, "failed to find channel in license during") + } + // semvers can be compared across channels // if a semmver is missing, fallback to comparing the cursor but only if channel is the same - if license.Spec.IsSemverRequired && appVersion.Semver != nil && requiredSemverErr == nil { + if licenseChan.IsSemverRequired && appVersion.Semver != nil && requiredSemverErr == nil { if (*appVersion.Semver).GTE(requiredSemver) { laterReleaseInstalled = true break diff --git a/pkg/update/required_test.go b/pkg/update/required_test.go index 973be2d57b..d53f589a2f 100644 --- a/pkg/update/required_test.go +++ b/pkg/update/required_test.go @@ -12,6 +12,29 @@ import ( func Test_getRequiredAirgapUpdates(t *testing.T) { channelID := "channel-id" + channelName := "channel-name" + + testLicense := &kotsv1beta1.License{ + Spec: kotsv1beta1.LicenseSpec{ + ChannelID: "default-channel-id", + ChannelName: "Default Channel", + Channels: []kotsv1beta1.Channel{ + { + ChannelID: "default-channel-id", + ChannelName: "Default Channel", + IsDefault: true, + IsSemverRequired: true, + }, + { + ChannelID: channelID, + ChannelName: channelName, + IsDefault: false, + IsSemverRequired: true, + }, + }, + }, + } + tests := []struct { name string airgap *kotsv1beta1.Airgap @@ -20,6 +43,7 @@ func Test_getRequiredAirgapUpdates(t *testing.T) { channelChanged bool wantSemver []string wantNoSemver []string + selectedChannelID string }{ { name: "nothing is installed yet", @@ -40,6 +64,7 @@ func Test_getRequiredAirgapUpdates(t *testing.T) { installedVersions: []*downstreamtypes.DownstreamVersion{}, wantNoSemver: []string{}, wantSemver: []string{}, + selectedChannelID: channelID, }, { name: "latest satisfies all prerequsites", @@ -62,9 +87,7 @@ func Test_getRequiredAirgapUpdates(t *testing.T) { }, }, }, - license: &kotsv1beta1.License{ - Spec: kotsv1beta1.LicenseSpec{}, - }, + license: testLicense, installedVersions: []*downstreamtypes.DownstreamVersion{ { ChannelID: channelID, @@ -72,8 +95,9 @@ func Test_getRequiredAirgapUpdates(t *testing.T) { UpdateCursor: "124", }, }, - wantNoSemver: []string{}, - wantSemver: []string{}, + wantNoSemver: []string{}, + wantSemver: []string{}, + selectedChannelID: channelID, }, { name: "need some prerequsites", @@ -96,9 +120,7 @@ func Test_getRequiredAirgapUpdates(t *testing.T) { }, }, }, - license: &kotsv1beta1.License{ - Spec: kotsv1beta1.LicenseSpec{}, - }, + license: testLicense, installedVersions: []*downstreamtypes.DownstreamVersion{ { ChannelID: channelID, @@ -106,8 +128,9 @@ func Test_getRequiredAirgapUpdates(t *testing.T) { UpdateCursor: "117", }, }, - wantNoSemver: []string{"0.1.120", "0.1.123"}, - wantSemver: []string{"0.1.120", "0.1.123"}, + wantNoSemver: []string{"0.1.120", "0.1.123"}, + wantSemver: []string{"0.1.120", "0.1.123"}, + selectedChannelID: channelID, }, { name: "need all prerequsites", @@ -130,9 +153,7 @@ func Test_getRequiredAirgapUpdates(t *testing.T) { }, }, }, - license: &kotsv1beta1.License{ - Spec: kotsv1beta1.LicenseSpec{}, - }, + license: testLicense, installedVersions: []*downstreamtypes.DownstreamVersion{ { ChannelID: channelID, @@ -140,8 +161,9 @@ func Test_getRequiredAirgapUpdates(t *testing.T) { UpdateCursor: "113", }, }, - wantNoSemver: []string{"0.1.115", "0.1.120", "0.1.123"}, - wantSemver: []string{"0.1.115", "0.1.120", "0.1.123"}, + wantNoSemver: []string{"0.1.115", "0.1.120", "0.1.123"}, + wantSemver: []string{"0.1.115", "0.1.120", "0.1.123"}, + selectedChannelID: channelID, }, { name: "check across multiple channels", @@ -164,8 +186,68 @@ func Test_getRequiredAirgapUpdates(t *testing.T) { }, }, }, + license: testLicense, + channelChanged: true, + installedVersions: []*downstreamtypes.DownstreamVersion{ + { + ChannelID: "different-channel", + VersionLabel: "0.1.117", + UpdateCursor: "117", + }, + }, + wantNoSemver: []string{}, + wantSemver: []string{}, + selectedChannelID: channelID, + }, + { + name: "check across multiple channels with multi chan license", + airgap: &kotsv1beta1.Airgap{ + Spec: kotsv1beta1.AirgapSpec{ + ChannelID: channelID, + RequiredReleases: []kotsv1beta1.AirgapReleaseMeta{ + { + VersionLabel: "0.1.123", + UpdateCursor: "123", + }, + { + VersionLabel: "0.1.120", + UpdateCursor: "120", + }, + { + VersionLabel: "0.1.115", + UpdateCursor: "115", + }, + }, + }, + }, license: &kotsv1beta1.License{ - Spec: kotsv1beta1.LicenseSpec{}, + Spec: kotsv1beta1.LicenseSpec{ + ChannelID: "stable-channel", // intentionally fully avoiding the default channel + ChannelName: "Stable Channel", + Channels: []kotsv1beta1.Channel{ + { + ChannelID: "stable-channel", + ChannelName: "Stable Channel", + ChannelSlug: "stable-channel", + IsDefault: false, + IsSemverRequired: true, + }, + { + ChannelID: "different-channel", + ChannelName: "Different Channel", + ChannelSlug: "different-channel", + IsDefault: true, + IsSemverRequired: false, + }, + { + ChannelID: channelID, + ChannelName: channelName, + ChannelSlug: channelID, + IsDefault: false, + IsSemverRequired: true, + }, + }, + }, }, channelChanged: true, installedVersions: []*downstreamtypes.DownstreamVersion{ @@ -175,14 +257,14 @@ func Test_getRequiredAirgapUpdates(t *testing.T) { UpdateCursor: "117", }, }, - wantNoSemver: []string{}, - wantSemver: []string{}, + wantNoSemver: []string{}, + wantSemver: []string{}, + selectedChannelID: channelID, }, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { req := require.New(t) - for _, v := range tt.installedVersions { s := semver.MustParse(v.VersionLabel) v.Semver = &s @@ -193,13 +275,13 @@ func Test_getRequiredAirgapUpdates(t *testing.T) { // cursor based tt.license.Spec.IsSemverRequired = false - got, err := getRequiredAirgapUpdates(tt.airgap, tt.license, tt.installedVersions, tt.channelChanged) + got, err := getRequiredAirgapUpdates(tt.airgap, tt.license, tt.installedVersions, tt.channelChanged, tt.selectedChannelID) req.NoError(err) req.Equal(tt.wantNoSemver, got) // semver based tt.license.Spec.IsSemverRequired = true - got, err = getRequiredAirgapUpdates(tt.airgap, tt.license, tt.installedVersions, tt.channelChanged) + got, err = getRequiredAirgapUpdates(tt.airgap, tt.license, tt.installedVersions, tt.channelChanged, tt.selectedChannelID) req.NoError(err) req.Equal(tt.wantSemver, got) }) diff --git a/pkg/update/update.go b/pkg/update/update.go index badc7aefa8..3d79e61ffb 100644 --- a/pkg/update/update.go +++ b/pkg/update/update.go @@ -8,12 +8,14 @@ import ( "github.com/pkg/errors" apptypes "github.com/replicatedhq/kots/pkg/app/types" "github.com/replicatedhq/kots/pkg/kotsutil" + "github.com/replicatedhq/kots/pkg/logger" "github.com/replicatedhq/kots/pkg/reporting" storepkg "github.com/replicatedhq/kots/pkg/store" "github.com/replicatedhq/kots/pkg/update/types" upstreampkg "github.com/replicatedhq/kots/pkg/upstream" upstreamtypes "github.com/replicatedhq/kots/pkg/upstream/types" kotsv1beta1 "github.com/replicatedhq/kotskinds/apis/kots/v1beta1" + "go.uber.org/zap" ) // a ephemeral directory to store available updates @@ -29,7 +31,12 @@ func InitAvailableUpdatesDir() error { } func GetAvailableUpdates(kotsStore storepkg.Store, app *apptypes.App, license *kotsv1beta1.License) ([]types.AvailableUpdate, error) { - updateCursor, err := kotsStore.GetCurrentUpdateCursor(app.ID, license.Spec.ChannelID) + licenseChan, err := kotsutil.FindChannelInLicense(app.SelectedChannelID, license) + if err != nil { + return nil, errors.Wrap(err, "failed to find channel in license") + } + + updateCursor, err := kotsStore.GetCurrentUpdateCursor(app.ID, licenseChan.ChannelID) if err != nil { return nil, errors.Wrap(err, "failed to get current update cursor") } @@ -39,8 +46,8 @@ func GetAvailableUpdates(kotsStore storepkg.Store, app *apptypes.App, license *k License: license, LastUpdateCheckAt: app.LastUpdateCheckAt, CurrentCursor: updateCursor, - CurrentChannelID: license.Spec.ChannelID, - CurrentChannelName: license.Spec.ChannelName, + CurrentChannelID: licenseChan.ChannelID, + CurrentChannelName: licenseChan.ChannelName, ChannelChanged: app.ChannelChanged, SortOrder: "desc", // get the latest updates first ReportingInfo: reporting.GetReportingInfo(app.ID), @@ -88,8 +95,12 @@ func GetAvailableAirgapUpdates(app *apptypes.App, license *kotsv1beta1.License) if airgap.Spec.AppSlug != license.Spec.AppSlug { return nil } - if airgap.Spec.ChannelID != license.Spec.ChannelID { - return nil + if _, err = kotsutil.FindChannelInLicense(airgap.Spec.ChannelID, license); err != nil { + logger.Info("skipping airgap update check for channel not found in current license", + zap.String("airgap_channelName", airgap.Spec.ChannelName), + zap.String("airgap_channelID", airgap.Spec.ChannelID), + ) + return nil // skip airgap updates that are not for the current channel, preserving previous behavior } deployable, nonDeployableCause, err := IsAirgapUpdateDeployable(app, airgap) diff --git a/pkg/update/update_test.go b/pkg/update/update_test.go index 091dd8c725..1e880fdb0f 100644 --- a/pkg/update/update_test.go +++ b/pkg/update/update_test.go @@ -31,19 +31,21 @@ func TestGetAvailableUpdates(t *testing.T) { license *kotsv1beta1.License } tests := []struct { - name string - args args - channelReleases []upstream.ChannelRelease - setup func(t *testing.T, args args, mockServerEndpoint string) - want []types.AvailableUpdate - wantErr bool + name string + args args + perChannelReleases map[string][]upstream.ChannelRelease + setup func(t *testing.T, args args, mockServerEndpoint string) + want []types.AvailableUpdate + wantErr bool + expectedSelectedChannelId string }{ { name: "no updates", args: args{ kotsStore: mockStore, app: &apptypes.App{ - ID: "app-id", + ID: "app-id", + SelectedChannelID: "channel-id", }, license: &kotsv1beta1.License{ Spec: kotsv1beta1.LicenseSpec{ @@ -54,21 +56,23 @@ func TestGetAvailableUpdates(t *testing.T) { }, }, }, - channelReleases: []upstream.ChannelRelease{}, + perChannelReleases: map[string][]upstream.ChannelRelease{}, setup: func(t *testing.T, args args, licenseEndpoint string) { t.Setenv("USE_MOCK_REPORTING", "1") args.license.Spec.Endpoint = licenseEndpoint mockStore.EXPECT().GetCurrentUpdateCursor(args.app.ID, args.license.Spec.ChannelID).Return("1", nil) }, - want: []types.AvailableUpdate{}, - wantErr: false, + want: []types.AvailableUpdate{}, + wantErr: false, + expectedSelectedChannelId: "channel-id", }, { name: "has updates", args: args{ kotsStore: mockStore, app: &apptypes.App{ - ID: "app-id", + ID: "app-id", + SelectedChannelID: "channel-id", }, license: &kotsv1beta1.License{ Spec: kotsv1beta1.LicenseSpec{ @@ -79,22 +83,24 @@ func TestGetAvailableUpdates(t *testing.T) { }, }, }, - channelReleases: []upstream.ChannelRelease{ - { - ChannelSequence: 2, - ReleaseSequence: 2, - VersionLabel: "0.0.2", - IsRequired: false, - CreatedAt: testTime.Format(time.RFC3339), - ReleaseNotes: "release notes", - }, - { - ChannelSequence: 1, - ReleaseSequence: 1, - VersionLabel: "0.0.1", - IsRequired: true, - CreatedAt: testTime.Format(time.RFC3339), - ReleaseNotes: "release notes", + perChannelReleases: map[string][]upstream.ChannelRelease{ + "channel-id": { + { + ChannelSequence: 2, + ReleaseSequence: 2, + VersionLabel: "0.0.2", + IsRequired: false, + CreatedAt: testTime.Format(time.RFC3339), + ReleaseNotes: "release notes", + }, + { + ChannelSequence: 1, + ReleaseSequence: 1, + VersionLabel: "0.0.1", + IsRequired: true, + CreatedAt: testTime.Format(time.RFC3339), + ReleaseNotes: "release notes", + }, }, }, setup: func(t *testing.T, args args, licenseEndpoint string) { @@ -123,14 +129,16 @@ func TestGetAvailableUpdates(t *testing.T) { IsDeployable: true, }, }, - wantErr: false, + wantErr: false, + expectedSelectedChannelId: "channel-id", }, { name: "fails to fetch updates", args: args{ kotsStore: mockStore, app: &apptypes.App{ - ID: "app-id", + ID: "app-id", + SelectedChannelID: "channel-id", }, license: &kotsv1beta1.License{ Spec: kotsv1beta1.LicenseSpec{ @@ -141,20 +149,99 @@ func TestGetAvailableUpdates(t *testing.T) { }, }, }, - channelReleases: []upstream.ChannelRelease{}, + perChannelReleases: map[string][]upstream.ChannelRelease{}, setup: func(t *testing.T, args args, licenseEndpoint string) { t.Setenv("USE_MOCK_REPORTING", "1") args.license.Spec.Endpoint = licenseEndpoint mockStore.EXPECT().GetCurrentUpdateCursor(args.app.ID, args.license.Spec.ChannelID).Return("1", nil) }, - want: []types.AvailableUpdate{}, - wantErr: true, + want: []types.AvailableUpdate{}, + wantErr: true, + expectedSelectedChannelId: "channel-id", + }, + { + name: "uses installed channel id when multi-channel present", + args: args{ + kotsStore: mockStore, + app: &apptypes.App{ + ID: "app-id", + SelectedChannelID: "channel-id2", // explicitly using the non-default channel + }, + license: &kotsv1beta1.License{ + Spec: kotsv1beta1.LicenseSpec{ + ChannelID: "channel-id", + ChannelName: "channel-name", + AppSlug: "app-slug", + LicenseID: "license-id", + Channels: []kotsv1beta1.Channel{ + { + ChannelID: "channel-id", + ChannelName: "channel-name", + IsDefault: true, + }, + { + ChannelID: "channel-id2", + ChannelName: "channel-name2", + IsDefault: false, + }, + }, + }, + }, + }, + perChannelReleases: map[string][]upstream.ChannelRelease{ + "channel-id": { + { + ChannelSequence: 2, + ReleaseSequence: 2, + VersionLabel: "0.0.2", + IsRequired: false, + CreatedAt: testTime.Format(time.RFC3339), + ReleaseNotes: "release notes", + }, + { + ChannelSequence: 1, + ReleaseSequence: 1, + VersionLabel: "0.0.1", + IsRequired: true, + CreatedAt: testTime.Format(time.RFC3339), + ReleaseNotes: "release notes", + }, + }, + "channel-id2": { + { + ChannelSequence: 3, + ReleaseSequence: 3, + VersionLabel: "3.0.0", + IsRequired: false, + CreatedAt: testTime.Format(time.RFC3339), + ReleaseNotes: "release notes", + }, + }, + }, + setup: func(t *testing.T, args args, licenseEndpoint string) { + t.Setenv("USE_MOCK_REPORTING", "1") + args.license.Spec.Endpoint = licenseEndpoint + mockStore.EXPECT().GetCurrentUpdateCursor(args.app.ID, args.license.Spec.Channels[1].ChannelID).Return("1", nil) + }, + want: []types.AvailableUpdate{ + { + VersionLabel: "3.0.0", + UpdateCursor: "3", + ChannelID: "channel-id2", + IsRequired: false, + UpstreamReleasedAt: &testTime, + ReleaseNotes: "release notes", + IsDeployable: true, + }, + }, + wantErr: false, + expectedSelectedChannelId: "channel-id2", }, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { req := require.New(t) - mockServer := newMockServerWithReleases(tt.channelReleases, tt.wantErr) + mockServer := newMockServerWithReleases(tt.perChannelReleases, tt.expectedSelectedChannelId, tt.wantErr) defer mockServer.Close() tt.setup(t, tt.args, mockServer.URL) got, err := GetAvailableUpdates(tt.args.kotsStore, tt.args.app, tt.args.license) @@ -168,16 +255,29 @@ func TestGetAvailableUpdates(t *testing.T) { } } -func newMockServerWithReleases(channelReleases []upstream.ChannelRelease, wantErr bool) *httptest.Server { +func newMockServerWithReleases(preChannelReleases map[string][]upstream.ChannelRelease, expectedSelectedChannelId string, wantErr bool) *httptest.Server { return httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { if wantErr { http.Error(w, "error", http.StatusInternalServerError) return } + var response struct { ChannelReleases []upstream.ChannelRelease `json:"channelReleases"` } - response.ChannelReleases = channelReleases + + selectedChannelID := r.URL.Query().Get("selectedChannelId") + if selectedChannelID != expectedSelectedChannelId { + http.Error(w, "invalid selectedChannelId", http.StatusBadRequest) + return + } + + if releases, ok := preChannelReleases[selectedChannelID]; ok { + response.ChannelReleases = releases + } else { + response.ChannelReleases = []upstream.ChannelRelease{} + } + w.Header().Set("X-Replicated-UpdateCheckAt", time.Now().Format(time.RFC3339)) if err := json.NewEncoder(w).Encode(response); err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) diff --git a/pkg/updatechecker/updatechecker.go b/pkg/updatechecker/updatechecker.go index 44438d7134..05a87c675f 100644 --- a/pkg/updatechecker/updatechecker.go +++ b/pkg/updatechecker/updatechecker.go @@ -13,6 +13,7 @@ import ( apptypes "github.com/replicatedhq/kots/pkg/app/types" license "github.com/replicatedhq/kots/pkg/kotsadmlicense" upstream "github.com/replicatedhq/kots/pkg/kotsadmupstream" + "github.com/replicatedhq/kots/pkg/kotsutil" "github.com/replicatedhq/kots/pkg/logger" "github.com/replicatedhq/kots/pkg/preflight" preflighttypes "github.com/replicatedhq/kots/pkg/preflight/types" @@ -226,7 +227,12 @@ func checkForKotsAppUpdates(opts types.CheckForUpdatesOpts, finishedChan chan<- return nil, errors.Wrap(err, "failed to get app") } - updateCursor, err := store.GetCurrentUpdateCursor(a.ID, latestLicense.Spec.ChannelID) + licenseChan, err := kotsutil.FindChannelInLicense(a.SelectedChannelID, latestLicense) + if err != nil { + return nil, errors.Wrap(err, "failed to find channel in license after sync") + } + + updateCursor, err := store.GetCurrentUpdateCursor(a.ID, licenseChan.ChannelID) if err != nil { return nil, errors.Wrap(err, "failed to get current update cursor") } @@ -235,8 +241,8 @@ func checkForKotsAppUpdates(opts types.CheckForUpdatesOpts, finishedChan chan<- License: latestLicense, LastUpdateCheckAt: a.LastUpdateCheckAt, CurrentCursor: updateCursor, - CurrentChannelID: latestLicense.Spec.ChannelID, - CurrentChannelName: latestLicense.Spec.ChannelName, + CurrentChannelID: licenseChan.ChannelID, + CurrentChannelName: licenseChan.ChannelName, ChannelChanged: a.ChannelChanged, Silent: false, ReportingInfo: reporting.GetReportingInfo(a.ID), @@ -266,7 +272,7 @@ func checkForKotsAppUpdates(opts types.CheckForUpdatesOpts, finishedChan chan<- return nil, errors.Errorf("no app versions found for app %s in downstream %s", opts.AppID, d.ClusterID) } - filteredUpdates := removeOldUpdates(updates.Updates, appVersions, latestLicense.Spec.IsSemverRequired) + filteredUpdates := removeOldUpdates(updates.Updates, appVersions, licenseChan.IsSemverRequired) var availableReleases []types.UpdateCheckRelease availableSequence := appVersions.AllVersions[0].Sequence + 1 diff --git a/pkg/upstream/fetch.go b/pkg/upstream/fetch.go index 7e634294c6..2fe0b075fb 100644 --- a/pkg/upstream/fetch.go +++ b/pkg/upstream/fetch.go @@ -60,6 +60,7 @@ func downloadUpstream(upstreamURI string, fetchOptions *types.FetchOptions) (*ty fetchOptions.LocalRegistry, fetchOptions.ReportingInfo, fetchOptions.SkipCompatibilityCheck, + fetchOptions.AppSelectedChannelID, ) } diff --git a/pkg/upstream/fetch_test.go b/pkg/upstream/fetch_test.go index bda113b936..9e54aa565d 100644 --- a/pkg/upstream/fetch_test.go +++ b/pkg/upstream/fetch_test.go @@ -37,16 +37,22 @@ ACgAAA==`, airgapVersionLabel string currentVersionLabel string expectedLabel string + expectedChannelID string + expectedChannelName string }{ { airgapVersionLabel: "10.9.8", currentVersionLabel: "1.2.0", expectedLabel: "10.9.8", + expectedChannelID: "channel-2", + expectedChannelName: "ChannelTwo", }, { airgapVersionLabel: "", currentVersionLabel: "1.2.0", expectedLabel: "1.2.0", + expectedChannelID: "channel-2", + expectedChannelName: "ChannelTwo", }, } @@ -59,6 +65,19 @@ ACgAAA==`, Spec: kotsv1beta1.LicenseSpec{ Endpoint: "http://localhost", AppSlug: "app-slug", + Channels: []kotsv1beta1.Channel{ + { + ChannelID: "channel-1", + ChannelName: "ChannelOne", + ChannelSlug: "channel-one", + IsDefault: true, + }, + { + ChannelID: "channel-2", + ChannelName: "ChannelTwo", + ChannelSlug: "channel-two", + }, + }, }, }, Airgap: &kotsv1beta1.Airgap{ @@ -72,9 +91,12 @@ ACgAAA==`, }, }, }, + AppSelectedChannelID: "channel-2", } u, err := FetchUpstream("replicated://app-slug", fetchOptions) req.NoError(err) assert.Equal(t, test.expectedLabel, u.VersionLabel) + assert.Equal(t, test.expectedChannelID, u.ChannelID) + assert.Equal(t, test.expectedChannelName, u.ChannelName) } } diff --git a/pkg/upstream/replicated.go b/pkg/upstream/replicated.go index 8569db4841..a566342bb2 100644 --- a/pkg/upstream/replicated.go +++ b/pkg/upstream/replicated.go @@ -81,7 +81,7 @@ func getUpdatesReplicated(fetchOptions *types.FetchOptions) (*types.UpdateCheckR return nil, errors.New("No license was provided") } - pendingReleases, updateCheckTime, err := listPendingChannelReleases(fetchOptions.License, fetchOptions.LastUpdateCheckAt, currentCursor, fetchOptions.ChannelChanged, fetchOptions.SortOrder, fetchOptions.ReportingInfo) + pendingReleases, updateCheckTime, err := listPendingChannelReleases(fetchOptions.License, fetchOptions.LastUpdateCheckAt, currentCursor, fetchOptions.ChannelChanged, fetchOptions.SortOrder, fetchOptions.ReportingInfo, fetchOptions.CurrentChannelID) if err != nil { return nil, errors.Wrap(err, "failed to list replicated app releases") } @@ -131,6 +131,7 @@ func downloadReplicated( registry registrytypes.RegistrySettings, reportingInfo *reportingtypes.ReportingInfo, skipCompatibilityCheck bool, + appSelectedChannelID string, ) (*types.Upstream, error) { var release *Release @@ -168,12 +169,12 @@ func downloadReplicated( } } - downloadedRelease, err := downloadReplicatedApp(replicatedUpstream, license, updateCursor, reportingInfo) + downloadedRelease, err := downloadReplicatedApp(replicatedUpstream, license, updateCursor, reportingInfo, appSelectedChannelID) if err != nil { return nil, errors.Wrap(err, "failed to download replicated app") } - licenseData, err := replicatedapp.GetLatestLicense(license) + licenseData, err := replicatedapp.GetLatestLicense(license, appSelectedChannelID) if err != nil { return nil, errors.Wrap(err, "failed to get latest license") } @@ -204,8 +205,17 @@ func downloadReplicated( // get channel name from license, if one was provided channelID, channelName := "", "" if license != nil { - channelID = license.Spec.ChannelID - channelName = license.Spec.ChannelName + if appSelectedChannelID != "" { + channel, err := kotsutil.FindChannelInLicense(appSelectedChannelID, license) + if err != nil { + return nil, errors.Wrap(err, "failed to find channel in license") + } + channelID = channel.ChannelID + channelName = channel.ChannelName + } else { + channelID = license.Spec.ChannelID + channelName = license.Spec.ChannelName + } } if existingIdentityConfig == nil { @@ -344,8 +354,8 @@ func readReplicatedAppFromLocalPath(localPath string, localCursor replicatedapp. return &release, nil } -func downloadReplicatedApp(replicatedUpstream *replicatedapp.ReplicatedUpstream, license *kotsv1beta1.License, cursor replicatedapp.ReplicatedCursor, reportingInfo *reportingtypes.ReportingInfo) (*Release, error) { - getReq, err := replicatedUpstream.GetRequest("GET", license, cursor) +func downloadReplicatedApp(replicatedUpstream *replicatedapp.ReplicatedUpstream, license *kotsv1beta1.License, cursor replicatedapp.ReplicatedCursor, reportingInfo *reportingtypes.ReportingInfo, selectedAppChannel string) (*Release, error) { + getReq, err := replicatedUpstream.GetRequest("GET", license, cursor, selectedAppChannel) if err != nil { return nil, errors.Wrap(err, "failed to create http request") } @@ -441,7 +451,7 @@ func downloadReplicatedApp(replicatedUpstream *replicatedapp.ReplicatedUpstream, return &release, nil } -func listPendingChannelReleases(license *kotsv1beta1.License, lastUpdateCheckAt *time.Time, currentCursor replicatedapp.ReplicatedCursor, channelChanged bool, sortOrder string, reportingInfo *reportingtypes.ReportingInfo) ([]ChannelRelease, *time.Time, error) { +func listPendingChannelReleases(license *kotsv1beta1.License, lastUpdateCheckAt *time.Time, currentCursor replicatedapp.ReplicatedCursor, channelChanged bool, sortOrder string, reportingInfo *reportingtypes.ReportingInfo, selectedChannelID string) ([]ChannelRelease, *time.Time, error) { u, err := url.Parse(license.Spec.Endpoint) if err != nil { return nil, nil, errors.Wrap(err, "failed to parse endpoint from license") @@ -461,6 +471,7 @@ func listPendingChannelReleases(license *kotsv1beta1.License, lastUpdateCheckAt urlValues.Set("channelSequence", sequence) urlValues.Add("licenseSequence", fmt.Sprintf("%d", license.Spec.LicenseSequence)) urlValues.Add("isSemverSupported", "true") + urlValues.Add("selectedChannelId", selectedChannelID) if lastUpdateCheckAt != nil { urlValues.Add("lastUpdateCheckAt", lastUpdateCheckAt.UTC().Format(time.RFC3339)) diff --git a/pkg/upstream/types/types.go b/pkg/upstream/types/types.go index 126792a551..169d10a0fc 100644 --- a/pkg/upstream/types/types.go +++ b/pkg/upstream/types/types.go @@ -115,6 +115,7 @@ type FetchOptions struct { LocalRegistry registrytypes.RegistrySettings ReportingInfo *reportingtypes.ReportingInfo SkipCompatibilityCheck bool + AppSelectedChannelID string } func (u *Upstream) GetUpstreamDir(options WriteOptions) string { From f10a45c2b367ffb644551f07c5cf8bdf2dcb268a Mon Sep 17 00:00:00 2001 From: Diamon Wiggins <38189728+diamonwiggins@users.noreply.github.com> Date: Thu, 8 Aug 2024 13:00:19 -0400 Subject: [PATCH 037/123] revert uri field in default support bundle spec (#4812) --- pkg/supportbundle/staticspecs/defaultspec.yaml | 1 - 1 file changed, 1 deletion(-) diff --git a/pkg/supportbundle/staticspecs/defaultspec.yaml b/pkg/supportbundle/staticspecs/defaultspec.yaml index db10366ed8..baba0c20a8 100644 --- a/pkg/supportbundle/staticspecs/defaultspec.yaml +++ b/pkg/supportbundle/staticspecs/defaultspec.yaml @@ -3,7 +3,6 @@ kind: SupportBundle metadata: name: default-supportbundle spec: - uri: "https://raw.githubusercontent.com/replicatedhq/kots/main/pkg/supportbundle/staticspecs/defaultspec.yaml" collectors: - clusterInfo: {} - clusterResources: {} From 8b96cedf7bee1e955f16b043f62d550a44592019 Mon Sep 17 00:00:00 2001 From: Mia Wong Date: Fri, 9 Aug 2024 13:05:57 -0400 Subject: [PATCH 038/123] Add dropdown and radio config item types (#4813) * Add 'radio' and 'dropdown' config item types (#4811) --------- Co-authored-by: Salah Al Saleh --- e2e/playwright/tests/smoke-test/test.spec.ts | 6 ++ pkg/kotsadmconfig/types/types.go | 2 + pkg/template/config_context.go | 2 + .../config_render/ConfigDropdown.tsx | 81 +++++++++++++++++++ .../components/config_render/ConfigGroup.jsx | 27 +++++++ 5 files changed, 118 insertions(+) create mode 100644 web/src/components/config_render/ConfigDropdown.tsx diff --git a/e2e/playwright/tests/smoke-test/test.spec.ts b/e2e/playwright/tests/smoke-test/test.spec.ts index 9e87a4130a..c9d375b5cd 100644 --- a/e2e/playwright/tests/smoke-test/test.spec.ts +++ b/e2e/playwright/tests/smoke-test/test.spec.ts @@ -61,6 +61,12 @@ test('smoke test', async ({ page }) => { await page.getByRole('link', { name: 'Config', exact: true }).click(); await expect(page.locator('h3')).toContainText('My Example Config'); await expect(page.locator('#version_sequence-group')).toContainText('This version is 1'); + await expect(page.getByRole("combobox")).toHaveValue("option_1"); + await page.getByRole("combobox").selectOption("option_2"); + await expect(page.getByRole("combobox")).toHaveValue("option_2"); + await expect(page.getByLabel("radio_1")).toBeChecked(); + await page.getByLabel("radio_2").click(); + await expect(page.getByLabel("radio_2")).toBeChecked(); await expect(page.getByRole('button', { name: 'Save config' })).toBeVisible(); await page.getByRole('link', { name: 'Troubleshoot' }).click(); await expect(page.getByRole('button', { name: 'Analyze App Name' })).toBeVisible(); diff --git a/pkg/kotsadmconfig/types/types.go b/pkg/kotsadmconfig/types/types.go index 69f9d89b94..a98db125f5 100644 --- a/pkg/kotsadmconfig/types/types.go +++ b/pkg/kotsadmconfig/types/types.go @@ -10,6 +10,8 @@ const ( PasswordItemType = "password" TextAreaItemType = "textarea" SelectOneItemType = "select_one" + RadioItemType = "radio" + DropdownItemType = "dropdown" ) type ConfigGroupValidationError struct { diff --git a/pkg/template/config_context.go b/pkg/template/config_context.go index 17fdabd9d7..908b58bdda 100644 --- a/pkg/template/config_context.go +++ b/pkg/template/config_context.go @@ -205,6 +205,8 @@ func isReadOnly(item kotsv1beta1.ConfigItem) bool { "select": {}, "select_many": {}, "select_one": {}, + "radio": {}, + "dropdown": {}, "text": {}, "textarea": {}, } diff --git a/web/src/components/config_render/ConfigDropdown.tsx b/web/src/components/config_render/ConfigDropdown.tsx new file mode 100644 index 0000000000..bab9db5c28 --- /dev/null +++ b/web/src/components/config_render/ConfigDropdown.tsx @@ -0,0 +1,81 @@ +import { useState } from "react"; +import { ConfigWrapper } from "./ConfigComponents"; +import ConfigItemTitle from "./ConfigItemTitle"; +import Icon from "@components/Icon"; +import Markdown from "react-remarkable"; +import { isEmpty } from "lodash"; + +const ConfigDropdown = (props) => { + const [selectedValue, setSelectedValue] = useState( + props.value || props.default || "" + ); + + let options = [{ value: "", label: "Select an option" }]; + + props.items.map((item) => { + if (isEmpty(item)) { + return null; + } + options.push({ value: item.name, label: item.title }); + }); + + const handleChange = (val) => { + setSelectedValue(val); + props.handleOnChange(props.name, val); + }; + + return ( + + ); +}; + +export default ConfigDropdown; diff --git a/web/src/components/config_render/ConfigGroup.jsx b/web/src/components/config_render/ConfigGroup.jsx index 534d97cae4..15ce091579 100644 --- a/web/src/components/config_render/ConfigGroup.jsx +++ b/web/src/components/config_render/ConfigGroup.jsx @@ -13,6 +13,7 @@ import ConfigFileInput from "./ConfigFileInput"; import { setOrder } from "./ConfigUtil"; import { ConfigWrapper } from "./ConfigComponents"; import Icon from "../Icon"; +import ConfigDropdown from "./ConfigDropdown"; const ConfigGroup = (props) => { const markdownNode = createRef(); @@ -150,6 +151,19 @@ const ConfigGroup = (props) => { /> ); + case "radio": + return ( +